DevC++使用说明Word文件下载.docx
《DevC++使用说明Word文件下载.docx》由会员分享,可在线阅读,更多相关《DevC++使用说明Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
”Save”菜单是灰色的,此时需要从主菜单选择“File”->
”SaveAs”来保存;
此外,对于正在编辑的程序,如果你想对其进行重新命名或者将其保存到另一个磁盘目录下,也可以用“File”->
”SaveAs”菜单,如图7所示。
图7使用SaveAs保存文件
4.在程序编辑区域编辑程序。
如图8所示。
在输入程序的过程中记得要随时对程序进行保存(使用菜单“File”->
”Save”,或者用组合键Ctrl+s),此时会将程序以相同名字重新保存到之前指定的目录下,如F:
\temp,覆盖掉之前的同名文件。
图8在程序编辑区域编辑程序
需要注意以下两点:
1)编辑时除了字符串和注释,其余部分要使用半角字符。
全角字符和半角字符外观很像,尤其是全角分号和半角分号,全角括号和半角括号,不仔细看很难分辩清楚,因此程序输入时要小心,避免此类问题。
2)在Dev-C++环境下,为了查看程序运行结果,需要在main函数的return语句前加上:
system("
PAUSE"
)或system("
pause"
);
这样程序运行到该语句时,结果显示屏幕将会停留,让我们有时间观察程序的输出结果。
否则结果显示屏幕将会一闪而过。
3.预处理、编译、链接程序
从主菜单选“Execute”->
“Compile”(“运行”->
“编译”)或快捷键“Ctrl+F9”,可以一次性完成程序的预处理、编译和链接过程。
如果程序中存在词法、语法等错误,则编译过程失败,编译器将会在屏幕右下角的“CompileLog”标签页中显示错误信息,如下图9所示,并且将源程序相应的错误行标成红色底色,如图10所示(由于删除了printf语句后面的分号,编译时报错,提示system语句前面的语句有语法错误(syntaxerror))。
图9编译错误显示
图10编译提示错误行
“CompileLog”标签页中显示的错误信息是寻找错误原因的重要信息来源,每一位读者都要学会看这些错误信息,并且每一次你碰到错误并且最终解决了错误时,要记录错误信息以及相应的解决方法。
这样以后看到类似的错误提示信息,能熟练反应出是源程序哪里有问题,从而提高程序调试效率。
排除了程序中存在的词法、语法等错误后,编译成功,此时在源文件所在目录下将会出现一个同名的.exe可执行文件(如test.exe)。
双击这个文件,即可运行程序。
4.运行程序
对程序进行预处理、编译、链接后,可以有两种方法运行程序。
第一种方法是双击生成的.exe文件;
第二种方法是直接在Dev-C++环境下从主菜单选“Excute”->
“Run”或快捷键“Ctrl+F10”运行程序。
如图11所示。
图11运行程序
5.调试程序
通过预处理、编译和链接的程序仅仅说明该程序中没有词法和语法等错误,而无法发现程序深层次的问题(譬如算法不对导致结果不正确)。
当程序运行出错时,我们需要找出错误原因。
仔细读程序来寻找错误固然是一种方法,但是有时光靠读程序已经解决不了问题,此时需要借助于程序调试(Debug)手段。
这是一种有效的排错手段,每一位读者都需要掌握。
调试程序的步骤为:
第一步:
设置程序断点;
第二步:
进入调试运行状态;
第三步:
单步执行程序。
在执行过程中通过设置、查看watch窗口来辨别程序运行状态是否正确。
1.设置程序断点。
调试的基本思想是让程序运行到你认为可能有错误的代码前,然后停下来,在人为控制下逐条语句的运行。
通过在运行过程中查看相关变量的值以及程序执行路径,来找到错误所在位置、分析错误产生原因。
如果想让程序运行到某一行前能暂停下来,就需要将该行设成断点。
具体方法是在代码所在行行首单击,该行将被加亮。
默认的加亮颜色是红色。
如图12所示,将system(“pause”)语句设成断点,则程序运行完printf语句后,将会暂停。
需要说明的是,你可以在程序中根据需要设置多个断点。
如果想取消不让某行代码成为断点,则在代码行首再次单击即可,此时代码的红色底色消失。
图12设置一个断点
2.进入调试运行程序状态。
设置断点后,此时程序运行进入debug(调式)状态。
要在调试状态下运行程序,就不能使用主菜单“Execute”->
“Run”,而是需要用主菜单“Debug”->
“Debug”(或者按快捷键F8),进入调试运行状态。
如图13所示。
图13调试菜单项
程序将运行到第一个断点处暂停,此时断点处加亮色由红色变成蓝色,表示接下去将运行蓝色底色的这行代码,如图14所示。
图14程序运行到断点处
注意:
有时你会发现即使设置了断点,点击了主菜单“Debug”->
“Debug”,程序还是不在断点处停留。
解决方法:
取消断点,重新编译程序,然后再设置断点,点击主菜单“Debug”->
“Debug”即可。
3.单步执行程序。
要想运行蓝色底色的代码,可以使用图15所示的“NextStep(F7)”、“StepInto(ShiftF7)”、“Continue(CtrlF7)”,“RuntoCursor(ShiftF4)”等(具体含义见下面的介绍)。
在学习函数之前,一般用的是NextStep和Continue。
学习函数后,还会用到StepInto。
图15Debug菜单
在调试程序时,往往要观察程序运行过程中变量的值,以检测程序对变量的处理是否正确,可以在调试时,选择主菜单“Debug”->
“AddWatch”(F4)这一项,我们会看到弹出提示框用于输入变量名,这时可以根据调试需要,输入要观察的变量名,该变量随后将会显示在最左边Explore的Debug页中,如下图16所示。
如果左边小窗口中的当前页不是Debug页,则可以点击Debug标签使之成为当前页。
图16查看变量当前值
6.创建、编译、运行工程
到目前为止,编写的程序都是放在一个“.C”文件中。
如果程序很小又很紧凑,确实应该把所有的源代码写在一个“.C”文件中。
但如果你发现自己编写了许多函数(特别是通用函数),那么你就应该把程序分解成几个源文件(也叫做模块)。
把一个程序分解成几个源文件的过程叫做模块化程序设计(modularprogramming)。
模块化程序设计技术提倡用几个不同的结构紧凑的模块一起组成一个完整的程序。
例如,如果一个程序中有几种、屏幕函数和数据库函数,你就可以把这些函数分别放在三个源文件中,分别组成实用模块、屏幕模块和数据库模块。
工程用于管理同一个程序的多个文件,包括源文件和头文件等。
在此,我们介绍如何创建一个新的工程,如何把文件添加到工程,如何从工程中删除文件,如何编译、链接、运行工程。
这些是很基本的操作,请读者熟练掌握。
假设我们有一个名为“猴子选大王”的工程,工程包含的文件如下图17所示。
下面我们对这些文件做一介绍:
猴子选大王.dev:
这是Dev-C++环境下的工程文件,一个工程对应一个这样的文件,里面记录了工程相关的信息,例如工程包含哪些文件、各个文件的名称和保存路径等。
读者可以用文本编辑器打开看一下该文件的内容。
当要打开工程的时候,只需要双击该文件即可。
linkNode.h和link.h:
工程包含的两个用户自定义头文件。
main.c和link.c:
工程包含的两个源文件。
main.o和link.o:
main.c和link.c分别编译得到的目标文件。
猴子选大王.exe:
对工程进行编译、链接后得到的可执行程序。
Makefile.win:
对工程进行编译时Dev-C++环境创建的文件。
可见,main.o、link.o、Makefile.win和猴子选大王.exe这四个文件是对工程进行编译链接得到的文件。
图17一个工程包含的文件
1.新建工程
点击菜单,选择File(文件)->
new(新建)->
Project(工程),如图18所示。
图18新建工程
在弹出窗口的Basic页中选择ConsoleApplication(控制台应用程序),输入工程名称,选择是CProject(C工程),点击OK。
如图19所示。
图19设置工程属性
此时弹出对话框,要求指定工程存放路径。
设置好路径后点击保存。
此时系统往工程中自动加入main.c文件,如图20所示,文件中的代码是系统自动生成的。
图20工程中的main.c文件
2.向工程中添加文件
首先将已经存在的linkNode.h、link.c和link.h三个文件拷贝到工程所在目录(假设为G:
\temp\testProject)下,然后点击主菜单Project(工程)->
AddtoProject(添加),如图21所示,在弹出的对话框中选择要添加的源文件,然后点击打开,如图22所示。
图21添加文件到工程
图22选择要添加的文件
此时在左侧工程管理Project页中出现了加入的这3个文件,如图23所示。
图23Project页出现了新加入的文件
在当前工程中还可以新建或移除一个文件,选择Project(工程)->
NewFile(新建文件)创建一个新的文件,然后在保存路径处指定路径,即将该新建的文件添加到工程中。
而如果选择Project(工程)->
RemoveFormProject(从工程移除),则从工程中移除文件(注意该文件还存在于磁盘上,从工程中删除只是解除了和工程的关系)。
3.编译和运行
工程的编译和运行和单文件程序的编译和运行基本一样。
但是在工程中存在多个文件的情况下,可以使用主菜单Execute(运行)->
Compile(编译)(Ctrl+F9),编译当前工程中的所有文件;
也可以使用主菜单Execute(运行)->
Compilecurrentfile(编译当前文件)(Shift+Ctrl+F9),编译源程序编辑区域当前打开的文件。
7.打开一个已经存在的程序或工程
打开一个已经存在的源文件或工程进行编辑是最常见的操作。
方法是点击主菜单的”File”->
”OpenProjectorFile”(打开文件或工程),如图24所示,如果是打开单个文件,则在弹出的对话框中指定文件所在的路径,选择要打开的文件即可;
如果是打开工程,则在弹出的对话框中指定工程所在的路径,选择要打开的工程对应的.dev文件即可。
图24打开文件或工程
8.提高程序书写风格的一些操作
1.整段缩进
运用适当的缩进,可以提高代码的可读性。
但是如果靠人工一行一行的缩进,那将是非常枯燥的事情。
Dev-C++环境支持整段缩进。
方法是首先选中要缩进的代码段,然后点击主菜单下的”Edit”->
“Indent”,如图25所示,即可将整段代码右移N个字符。
图25整段缩进代码
每一次缩进要移动的字符数可以自己定制,方法如下:
点击主菜单下的”Tools”->
“EditOptions”,在弹出的对话框中的General标签页中进行设置,将TabSize设置成我们希望的数字,建议设成4,如图26所示。
该对话框提供了定制Dev-C++的界面编辑风格的功能,有兴趣的读者可以自己研究一下。
也可以点击”Edit”->
“Unindent”使整段代码往左移。
图26定义TabSize的大小
2.插入程序说明
为了简要说明程序的功能和各个函数、变量的作用,增强程序的可读性,我们可以在程序中插入适当的说明。
点击”Edit”->
“Insert”->
“CommentHeader”,如图27,从而在程序编辑区光标处插入一段注释,用于说明程序名称、作者和程序功能等,插入后的效果如图28所示。
图27插入程序说明
这些就是自动插入的程序说明部分
图28插入后的程序说明
附录4Dev-C++环境下常见编译错误信息中英文对照
说明:
此编译错误的对照信息适用于Dev-C++环境中基本的C语言编程,对于C++(类)编程不包括在其中。
英文提示信息
中文解释
补充说明
'
xxx'
undeclared(firstuseinthisfunction)
名为‘xxx’的常量或变量未定义或声明
一般由以下几种情况导致此编译错误的发生:
1.变量未定义就使用;
2.当变量定义后,使用时变量拼写错误;
3.当使用在其他文件中定义的全局变量时,使用前未对该变量进行声明;
syntaxerrorbefore"
xxx"
在"
之前有语法错误
通常是由于"
之前缺少符号(如分号)或者"
之前有不正确的符号导致的。
stray'
\163'
inprogram
通常是由于在字符串和注释以外的地方使用了全角字符。
assignmentofread-onlyvariable'
对只读变量’xxx’赋值
通常是由于定义变量时前面加了const修饰符使其成为了只读变量,但又试图对该变量赋值导致的(注意:
允许在定义的同时对只读变量进行初始化)。
invalidlvalueinassignment
赋值时无左值
通常是由于赋值操作符的左边不是变量导致的。
如:
对由#define定义的常量进行赋值
caselabeldoesnotreducetoanintegerconstant
case标号后面的常量表达式的值不是整常数值
通常是由于switch关键字后面的表达式的值不是一个整型(字符型)导致的。
incompatibletypesinassignment
赋值类型不匹配
通常是两个类型不一致且不能转换的变量在相互赋值时导致的。
如charstring[10];
string="
123"
;
xxx.h:
Nosuchfileordirectory.
没有xxx.h这样的文件或目录
通常是由于程序中要包含头文件xxx.h,由于相关文件夹下并没有这个文件导致的。
[Linkererror]undefinedreferenceto'
名为‘xxx’的函数未定义
1.函数未定义就调用;
2.调用函数时函数名拼写错误;
conflictingtypesfor'
函数‘xxx’类型不匹配
1.函数原型中的返回值类型和函数定义中的不一致;
2.函数原型中的参数类型和函数定义中的不一致;
3.函数原型中的参数个数和函数定义中的不一致;
4.函数调用在函数定义之前,且调用前未对函数原型进行声明,使得编译器认为函数的参数和返回值均是默认的int类型,而实际函数定义中的参数和返回值至少有一个不是int类型。
toofewargumentstofunction'
或者
toomanyargumentstofunction'
调用函数'
时,实参个数太少或太多
通常是由于函数调用时的实参个数少于或多于函数定义的形参个数。
redeclaredasdifferentkindofsymbol
被重新定义
通常是由于函数内定义的变量和函数的参数同名引起的。
assignmentmakespointerfromintegerwithoutacast
对整数未进行类型转换就赋值给指针变量
不能把0之外的整数赋给指针变量。
assignmentfromincompatiblepointertype
不同类型的指针变量之间的赋值
如果两指针类型相同,可以进行相互赋值;
如果两个指针中有一个是void*类型,可以进行相互赋值;
否则必须用强制类型转换运算符把赋值号右边指针的类型转换为赋值号左边指针的类型。