C语言宝典
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 C语言程序的调试过程

程序开发人员编写的程序称为源程序或源代码,源代码不能直接被计算机执行。源代码要经过编译程序编译,生成目标程序,然后连接其他相应的代码,最后生成可被计算机执行的可执行文件(.exe或.com文件)。一般来讲整个C程序的设计过程应该经过以下4步:

源程序文件的建立和编辑:编写源程序,形成.c文件。

需用编辑工具:tc.exe、“记事本”等。

编译:编译源程序,形成目标程序.obj文件。

需用编译工具:tcc.exe。

连接:连接obj文件和调用的库函数,形成运行程序 .exe文件。

需用连接工具:tlink.exe。

运行.exe文件。

Turbo C 2.0集成开发环境提供了相应的编辑工具、编译工具和连接工具。一个源代码有时要经过多次的修改才能编译通过,因此这一步有时是很困难的。程序在编译时,如果不能通过,则会有错误提示信息,程序员要根据错误提示信息调试程序。

下面介绍使用最广泛的C语言集成开发环境——Turbo C。

1.5.1 Turbo C 2.0集成开发环境介绍及使用

Turbo C是美国Borland公司的产品,该公司在1987年首次推出Turbo C 1.0产品。其中使用了全然一新的集成开发环境,即使用了一系列下拉式菜单,将文本编辑、程序编译、连接以及程序运行一体化,大大方便了程序的开发。1988年,Borland公司又推出Turbo C 1.5版本,增加了图形库和文本窗口函数库等,而Turbo C 2.0则是该公司1989年发布的。Turbo C 2.0在原来集成开发环境的基础上增加了查错功能,本节主要介绍Turbo C 2.0环境及此环境的使用方法。

Turbo C 2.0集成开发环境的启动方法有很多种,可以在DOS提示符下(进入Windows系统中的命令提示符),利用DOS命令dir、cd等找到Turbo C 2.0系统所在的文件夹路径,键入TC,即可进入Turbo C的开发环境。一般情况下具体步骤如下:

选择“开始”→“所有程序”→“附件”→“命令提示符”命令。

输入c:\Documents and Settings\Administrator>cd c:\tc。

输入c:\tc\tc。

或者在已安装Turbo C 2.0软件的目录下,双击运行tc.exe文件。都可以进入Turbo C 2.0集成开发环境。当进入Turbo C 2.0集成开发环境后,屏幕如图1.1所示。

图1.1 Turbo C的屏幕界面

其中最上面一行为Turbo C 2.0主菜单,中间窗口为编辑区,接下来是信息窗口,最下面一行为参考行,这4个窗口构成了Turbo C 2.0的主窗口。以后的编程、编译、调试以及运行都将在这个主窗口中进行。当用户按下Alt+E组合键或Esc键,光标将定位在编辑窗口的左上角。此时用户可以输入C语言的源程序。下面详细介绍主菜单的内容。

1.FiIe(文件)菜单

按Alt+F组合键可进入文件菜单。该菜单包括以下内容。

◆ Load(加载):装入一个文件,可用类似DOS的通配符(如*.C)进行列表选择。只要给出文件名(或只给路径)即可装入该文件。该项的快捷键为F3,即只要在主菜单中按F3键即可进入该项,而不需要先进入File菜单再选择此项。

◆ Pick(选择):将最近装入编辑窗口的8个文件列成一个表让用户选择。选择后将该程序装入编辑区,并将光标置在上次修改过的地方。

◆ New(新文件):创建新文件,默认文件名为NONAME.C,存盘时可改名。

◆ Save(存盘):将编辑区中的文件存盘,若文件名是NONAME.C时,将询问是否更改文件名,其热键为F2。

◆ Write to(存盘为):可由用户给出文件名将编辑区中的文件存盘,若该文件已存在,则询问是否覆盖。

◆ Directory(目录):显示目录及目录中的文件,并可由用户选择。

◆ Change dir(改变目录):显示当前目录,用户可以改变显示的目录。

◆ Os sheII(暂时退出):暂时退出Turbo C 2.0到DOS提示符下,此时可以运行DOS命令,若想回到Turbo C 2.0中,只要在DOS状态下键入EXIT即可。

◆ Quit(退出):退出Turbo C 2.0,返回到DOS操作系统中,其热键为Alt+X。

说明

以上各项可用编辑键中的↑和↓键移动选中条进行选择,按回车键则执行。也可用每一项的第一个大写字母直接选择。若要退到主菜单或从它的下一级菜单列表框退回均可用Esc键。Turbo C 2.0所有菜单均采用这种方法进行操作,以下不再说明。

2.Edit(编辑)菜单

按Alt+E组合键可进入编辑菜单。若再按回车键,则光标出现在编辑窗口。此时用户可以进行文本编辑。经常用到的编辑键主要有:

◆ 可用Insert键控制工作状态是否为“插入状态”。按下Insert键,可看到屏幕编辑窗口上有Insert字样,这时为插入状态,此时可在屏幕当前光标处插入所要输入的字符。

在插入状态下,再按一下Insert键可取消插入状态,状态行上的Insert标识消失,此时键入的字符将覆盖光标处的字符。

◆ Delete键将删除光标所在的字符。

◆ Ctrl+Y组合键,可删除光标所在的一行。

◆ Ctrl+N组合键,可用来插入一行。

3.Run(运行)菜单

按Alt+R组合键可进入运行菜单。该菜单的主要菜单项的内容有:

◆ Run(运行程序):运行由Project项指定的文件名或当前编辑区的文件。如果对上次编译后的源代码未做过修改,则直接运行到下一个断点(没有断点则运行到结束),否则先进行编译、连接后才运行。其热键为Ctrl+F9。

◆ Traceinto(跟踪进入):在执行一条调用其他用户定义的子函数时,若用Traceinto项,则执行长条将跟踪到该子函数内部去执行,其热键为F7。

◆ Stepover(单步执行):执行当前函数的下一条语句,即使有函数调用,执行长条也不会跟踪进函数内部,其热键为F8。

◆ Userscreen(用户屏幕):显示程序运行时在屏幕上显示的结果。其热键为Alt+F5。

4.CompiIe(编译)菜单

按Alt+C组合键可进入编译菜单。该菜单的主要菜单项的内容有:

◆ CompiIetoOBJ(编译生成目标码):将一个C源文件编译生成.obj目标文件,同时显示生成的文件名。其热键为Alt+F9。

◆ MakeEXEfiIe(生成执行文件):此命令生成一个.exe的文件,并显示生成的.exe文件名。其中.EXE文件名为当前窗口的文件名。

◆ LinkEXEfiIe(连接生成执行文件):把当前.obj文件及库文件连接在一起生成.exe文件。

5.Project(项目)菜单

该菜单主要用于建立项目和项目管理。

6.Options(选项)菜单

按Alt+O组合键可进入选项菜单。该菜单对初学者来说要谨慎使用,初学者一般使用Directories(路径)菜单,这个菜单中的命令可以规定编译、连接所需文件的路径,其中主要的菜单项有:

◆ IncIudedirectories:包含文件的路径,多个子目录用“;”分开。

◆ Librarydirectories:库文件路径,多个子目录用“;”分开。

◆ Outputdirectoried:输出文件(.obj,.exe,.map文件)的目录。

◆ Turbo Cdirectoried:Turbo C所在的目录。

7.Debug(调试)菜单

该菜单主要用于查错。

8.Break/watch(断点及监视表达式)菜单

按Alt+B组合键可进入断点及监视表达式菜单。该菜单包括以下内容:

◆ Addwatch:向监视窗口插入一个监视表达式。

◆ DeIetewatch:从监视窗口中删除当前的监视表达式。

◆ Editwatch:在监视窗口中编辑一个监视表达式。

◆ RemoveaIIwatches:从监视窗口中删除所有的监视表达式。

◆ ToggIebreakpoint:对光标所在的行设置或清除断点。

◆ CIearaIIbreakpoints:清除所有断点。

◆ Viewnextbreakpoint:将光标移动到下一个断点处。

Turbo C 2.0的配置文件指的是包含Turbo C 2.0有关信息的文件,其中存有编译、连接的选择和路径等信息。可以用下述方法建立Turbo C 2.0的配置:

◆ 建立用户自命名的配置文件:可以从Options菜单中选择Options→Saveoptions命令,将当前集成开发环境的所有配置存入一个由用户命名的配置文件中。下次启动TC时只要在DOS下键入:

    tc/c<用户命名的配置文件名>

就会将这个配置文件中的内容作为Turbo C 2.0的选择。

◆ 若设置Options/Environment/Configautosave为on,则退出集成开发环境时,当前的设置会自动存放到Turbo C 2.0配置文件tcconfig.tc中。Turbo C在启动时会自动寻找这个配置文件。

1.5.2 Turbo C 2.0运行程序的步骤

程序设计的最后一步是编写源程序代码。对于一个好的源程序来说,最好包含注释以描述程序各个部分的功能。此外,源程序还应包含调试程序段,以测试程序的运行情况,并允许查找程序错误。一旦程序运行情况良好,可去掉调试程序段,把源程序的固定部分保留下来,便于自己或其他人维护和修改。

所写源程序文件的扩展名必须为“.c”。计算机硬件不能直接执行源程序,必须将源程序翻译成二进制目标程序。翻译工作是由一个程序完成的,这个程序称为编译程序。翻译的过程称为编译,编译的结果称为目标程序,扩展名为“.obj”或“.o”。程序翻译成目标程序后,便可进行连接。连接的目的是使程序变成在计算机上可以执行的最终形式。在这一阶段,从系统程序库来的程序要与目标程序连接,连接的结果称为可执行程序,存放可执行程序的文件名字为“.exe”。

在Turbo C集成开发环境中建立一个新程序通常有以下两个步骤:

在编辑器中编写源文件。

生成可执行文件。

进入主TC屏后,按F3键,即可在随之出现的框中输入文件名,文件名可以带“.c”也可以不带(此时系统会自动加上)。输入文件名后按回车键,即可将文件调入。如果文件不存在,就将会建立一个新文件,随之进入编辑状态,此时就可以输入或修改源程序了。源程序输入或修改完毕以后,按Ctrl+F9组合键(同时按下Ctrl键和F9键),则立即进行编译、连接和执行,这三项工作是连续完成的。下面试着建立一个Turbo C中名为“file1.c”的源程序,操作步骤为:

进入Turbo C集成开发环境,并建立一个名为“file1.c”的文件。

通过键盘输入程序,例如:

    main()
    {
      printf("Hello C!\n");
    }

此时程序进入计算机内存。

程序存盘:为防止意外事故丢失程序,最好将输入的程序存储到磁盘中。存盘时屏幕最底行会显示:saving edit file。

编译程序:C语言对源程序进行编译有两种方法:

◆ 直接按Alt+F9组合键即可。

◆ 按F10键返回主菜单,选择Compile项,屏幕显示Compile下拉菜单,从下拉菜单中选择Compileto.OBJ项,按回车键。

进入编译状态后,屏幕会出现一个编译窗口,几秒钟后,屏幕如果显示一个闪烁信息:Success:press any key,则表示编译成功。此时可按任意键,编译窗口消失,光标返回主菜单。如果编译时产生警告Warning或出错Error信息,这些具体错误信息会显示在屏幕下部的信息窗中,必须纠正这些错误,对源程序进行修改,然后重新进行编译。

运行程序:源程序经编译无误后,按Ctrl+F9组合键便可以投入运行。程序投入运行时,屏幕会出现一个连接窗口,显示TurboC正在连接和程序所需的库函数。连接完毕后,屏幕会突然一闪后又回到TC主屏幕,此时可以按Alt+F5组合键来查看结果。对于代码1.1来说,此时屏幕被清除,在顶部显示“Hello C!”字样。再按任意键,又回到TC主屏幕。

1.5.3 程序编译中常见问题

在写程序的过程中,经常会犯一些错误导致程序不能通过编译。下面列举一些初学者经常容易犯的错误。

◆ 所有变量和常量必须加以说明。

◆ 变量只能赋给相同类型的数据。

◆ 对于scanf()语句,用户可能输入错误类型的数据项,这将导致运行时出错,并报出错信息。为避免这样的错误出现,需要提示用户输入正确类型的数据。

◆ 在执行算术运算时要注意:

● 根据语法规则书写双精度数字。要写0.5,而不是写.5;要写1.0,而不是1。尽管C语言会自动把整型转换成双精度型,但书写双精度型是个好习惯。让C语言为你做强行转换这是一种效率不高的程序设计风格。这种转换可能导致错误。

● 不要用0除。

● 确保所有的双精度数(包括那些程序输入用的双精度数)是在实数范围之内。

● 所有整数必须在整数允许的范围内。这适用于所有计算结果,包括中间结果。

◆ 将函数后面的“;”忘掉。此时错误提示亮条将停在该语句下的一行,并显示:

    Statement  missing; in function<函数名>

◆ 给宏指令如#include,#define等语句尾加了分号“;”。

◆ “{”和“}”、“(”和“)”、“/*”和“*/”不匹配。亮条将位于错误所在的行,并提示出有关丢掉括号的信息。

◆ 没有用#include指令说明头文件,错误信息提示有关该函数所使用的参数未定义。

◆ 使用了Turbo C保留关键字作为标识符,此时将提示定义了太多数据类型。

◆ 将定义变量语句放在了执行语句后面。此时会提示语法错误。

◆ 使用了未定义的变量,此时屏幕显示:

    Undefined symbol '<变量名>' in function<函数名>

◆ 警告错误太多。忽略这些警告错误并不影响程序的执行和结果。编译时当警告错误数目大于某一规定值(默认为100)时便退出编译器,这时应将集成开发环境Options/Compiler/Errors中的有关警告错误检查开关设置为off。

◆ 将关系符"= ="误用做赋值号"="。此时屏幕显示:

    Lvalue  equired  in function<函数名>