1.5 C语言程序开发工具
《论语》有云:“工欲善其事,必先利其器”,说的是工具的重要性。
程序员编写的C程序需经过编译产生目标文件,从C语言出现至今,出现了许多C语言的编译器和集成开发环境。目前流行的主要有Visual C++ 6.0(VC++)、Visual C++ 2013和Code::Blocks等。
Visual C++ 6.0和Visual C++ 2013都是美国微软公司的产品,是Windows平台上流行的C/C++集成开发环境之一,其功能强大,适合编写大型软件系统。Visual C++ 6.0是全国计算机等级考试二级C语言的考试环境,限于篇幅,我们在附录F中给出了简单的VC 6.0的使用指南,更详细的使用方法可以到出版社网站下载配套的辅助资源。
近年出现的一款自由软件——Code::Blocks(简称CB),功能强大,支持C与C++,是跨平台的C/C++集成开发环境(IDE),它可以配置多种编译器(本书建议读者使用GCC编译器和GDB调试器)。GCC全称是GNU Compiler Collection,GDB全称是GNU Project Debugger,它们都是由自由软件基金会GNU维护的自由软件,可以免费使用,绝大多数的Linux和UNIX系统上的软件都是由它们开发的。
GCC在Windows下有一个特别的包装版,叫MinGW,它集成了IDE与编译器。图1-14给出了Code::Blocks的首页地址:http:://www.codeblocks.org,读者可通过左边的Downloads链接进入下载页面,再根据所使用的操作系统选择相应环境下的带MinGW的CB版本。
图1-14 Code::Blocks主页(http://www.codeblocks.org)
进入Code:Blocks主页下载时,请选择Download the binary release选项,如果是Windows的用户,下载时请选择自带了MinGw编译器的版本。本书使用的是2013年12月27日发布的基于Windows操作系统的13.12版本(codeblocks-13.12mingw-setup.exe)。读者在下载时,可能已有更高的版本。
图1-15是Code::Blocks集成开发环境运行的初始界面。
图1-15 Code::Blocks集成开发环境初始界面
初始界面里提供了Create a new project(新建项目)、Open an existing project(打开已存在项目)、Visit the Code::Blocks forums(访问CB论坛)等操作选项。在初始界面中选择Create a new project选项,将出现CB选择项目类型的界面,如图1-16所示。
图1-16 CB中选择项目类型
CB可以支持多种类型的C项目开发,此处若选择Console application(控制台应用程序),将出现如图1-17所示的语言选择界面,接下来可选择C语言作为编程语言。
图1-17 CB中的语言选择界面
之后,将出现项目名称对话框,如图1-18所示。这时输入Project title(项目名称)并在Floder to create project in对话框中选择项目保存的文件夹。Project filename与Resulting filename将自动生成。
图1-18 CB中输入项目名称
单击“next”后,将进入编译器选项对话框,如图1-19所示。由于此版本自带GNU GCC编译器,因此CB将自动检测到相应的编译器(若本机还安装了其他编译器,用户可以在此指定编译程序时所用的编译器版本)。此处,我们直接单击“Finish”按钮,可进入程序编辑界面,如图1-20所示。
图1-19 配置CB编译器
图1-20 Code::Blocks IDE界面
在The C Programming Language一书中,第一个程序Hello world是极其简短的,它仅在显示器上输出了一条Hello world消息。
CB项目将自动创建名为main.c的源文件,其中就包含了输出Hello world的程序代码,如图1-20编辑窗口所示。该程序中各条语句的含义如图1-21所示,左侧的行号是CB IDE自动加上的,编程时不用输入。
图1-21 main.c各语句含义说明
程序的第1行与第2行是C语言的编译预处理命令,其作用是分别用#include指令将stdio.h和stdlib.h两个头文件加载到本程序中,供本程序使用存储于其中的函数或数据(函数可理解为C程序中具有逻辑关系的一组代码集合,用于完成特定的任务)。stdio.h是最为常用的头文件,里面包含了与输入/输出有关的函数。由于大部分程序都会涉及数据输入和数据输出,所以一般每个C程序都会在第一行加上#include <stdio.h>。本程序中的printf函数就是在stdio.h中定义好的输出函数。
第4行开始为本程序的唯一的函数:main函数。C语言规定C程序有且只有一个main函数,程序的执行和开始均从该函数开始,其他函数均被main函数直接或间接调用。第5行、第8行分别为main函数的开始与结束标识,由其括起的部分称为函数体。
第6行的printf("Hello World!\n");为函数调用语句,该语句调用printf函数在显示器上输出Hello World!。\n表示换行符,因此屏幕光标将在输出Hello World!后换到下一行。
C语言中语句的分隔符为“;”,第1行与2行的预处理命令不是C语句,因此在其之后不需要加上“;”。
第7行的return 0;为函数返回语句,当执行到该语句时,程序控制从该函数返回到调用该函数的程序。
在CB中编译、运行程序非常简单,“编译与运行”按钮所在位置如图1-20左上角所示。分别为“编译”“运行”和“编译并运行”。下方的Messages窗口用于显示编译信息。如果编译出错,窗口内会显示所有错误或警告发生的位置与错误提示,并列出错误和警告数量。双击错误信息,光标立刻跳转到发生错误的代码处。如果编译和链接无误,程序将在一个新打开的命令行窗口中运行并显示结果。
本程序运行结果如下所示。
Hello World! Process returned 0 (0x0) execution time : 0.042 s Press any key to continue.
在程序运行结束后,CB会自动在屏幕上显示程序返回值(Process returned 0(0x0)),并显示运行的时间(execution time:0.042s)(程序执行时间依具体的机器不同而不同)。
Press any key to continue.是CB自动加上的,看到此提示,说明程序已运行完毕,按任意键将关闭命令行窗口。
通常情况下,Project用于建立大型程序,对那些只需用单个源程序文件就可以完成设计的简单算法程序,可以通过CB的File菜单中的New子菜单(也可通过工具栏“新建”按钮)选择建立Empty file,如图1-22所示。
图1-22 利用Code::Blocks File菜单的New选项新建C程序
此时,CB不会自动生成测试程序,用户可以根据C语言的语法规则自行撰写程序。
建议读者先将新建程序文件存成后缀名为.c的源文件,再进行程序编辑,这样CB会根据C语言的语法对程序的语句或关键字自动进行识别,如对return等关键字以不同颜色显示,当输入“{”时,系统将自动出现配对的“}”等。利用CB这一功能,可方便我们编写程序。
程序文件取名遵行见名知意的规则,如用于排序的程序可取名为sort.c。为便于检索,本书中的源程序命名按以下规则:章序号_例题序号.c。例如,例1.1的源程序命名为1_1.c,例7.3的源程序命名为7_3.c,依此类推。
由于编程所需的知识尚未涉及,此处,读者可以在1_1.c文件的编辑窗口中输入以下程序代码。
#include <stdio.h> int main() { printf("welcome to C!\n"); printf("There is a will there is a way!\n"); return 0; }
经编译后可产生可执行文件,程序运行的结果如下所示(此处我们略去系统自动增加的提示信息)。
Welcome to C! There is a will there is a way!
注意
以Code::Blocks作为开发平台,当需要编写新的C程序时,需要先在File菜单中关闭当前程序项目,然后再选择新建工程或新建文件。当Project与单个C文件同时打开时,Code::Blocks默认的编译与运行对象是Project项目。
Code::Blocks提供单个源文件的编程方式,特别适合程序设计初学者。书中所有程序均在Code::Blocks与VC下调试通过。
使用VC 6.0、Visual C++ 2013编写C程序的方法与Code::Blocks相似。本书推荐采用Visual C++ 6.0或Code::Blocks作为C程序开发平台。