3章 C语言开发环境

“工欲善其事,必先利其器”。程序员要想快速高效地开发C程序,必须首先要熟悉C语言开发环境的使用。本章介绍几种常用C语言开发环境。

3.1 C语言开发环境简介

C语言可应用到多种硬件平台、多种操作系统中,对于不同的平台需要不同的C编译器。针对某一具体的硬件、操作系统环境,都会有多家软件公司推出不同的开发环境。程序员可根据软件工作环境和自己的习惯选择不同的开发环境。

3.1.1 C语言开发环境的组成

一般情况下,C语言开发环境都比较小,至少应包含以下部分:

编译程序:用来将C源代码编译为目标代码;

链接程序:将目标代码与库链接生成可执行程序;

函数库:一般C开发环境都提供符合ANSI C标准的函数库,有的开发环境还提供更多的函数库;

头文件:为库函数声明函数原型、定义常量。

随着C语言的发展,目前使用的开发环境都是一种集成开发环境(IDE)。在集成开发环境中,通过菜单命令对源代码进行编译、调试,省去了用户在编辑器、编译器之间的切换,提高了程序开发效率。

常用的C语言IDE有Microsoft Visual C++,Borland C++,Turbo C等。

3.1.2 常用开发环境

在不同的编译环境中,有不同的 C 语言开发环境。微机中常见的操作系统为 DOS、Windows和Unix(Linux)。在DOS和Windows操作系统中,常见的是集成开发环境,比如TC和VC等。而在UNIX(Linux)环境中,程序员更习惯于在控制台使用命令来编译C程序。

下面简单介绍常用开发环境的特点。

1.Turbo C

Turbo C是Borland公司的产品(简称TC),在集成开发环境中使用一系列下拉式菜单,将文本编辑、程序编译、链接,以及程序运行一体化,大大方便了程序的开发。这是DOS环境中最流行的C开发环境之一,在我国各院校都曾使用TC进行教学。TC的工作环境为16位的DOS操作系统,也可在Windows 2000、Windows XP的命令窗口中工作,但工作不稳定,不推荐在Windows中使用。

2.Visual C++

Visual C++是 Microsoft 公司推出的可视化软件开发语言工具,它适合编写 Windows应用程序。使用Visual C++集成开发环境能够方便地管理开发过程中的各个阶段——从创建源代码、编译代码到测试、调试和优化代码。通过Visual C++提供的MFC(微软基础类库)大大简化了Windows编程工作。

从名称上可以看出Visual C++支持C++,当然也可用于C语言程序的编写。与TC编译生成16位的程序不同,C语言源代码在Visual C++中编译后将得到32位的程序。

3.Dev-C++

Dev-C++是一个Windows下的C和C++程序的集成开发环境,使用GCC编译器,遵循C/C++标准。开发环境包括多页面窗口、工程编辑器及调试器等。在工程编辑器中集合了编辑器、编译器、链接程序和执行程序,提供高亮度语法显示等,以减少编辑错误,还有完善的调试功能。

与Visual C++相比,Dev C++没有提供针对Windows编程的类库,使得开发环境比较小巧,特别适合初学者使用。本书的大部分代码都在该环境中调试。

4.Linux C开发环境

Linux 的操作系统内核大部分代码就是用 C 语言编写的,同样,Linux 下的很多软件也是用C语言编写的,如MYSQL、Apache等。

在安装Linux时,如果选择了安装开发包,即可将C语言的函数库、编译器GCC安装到系统中。GCC(Gnu C Compiler)是GNU推出的功能强大、性能优越的多平台编译器(Dev C++也是使用GCC编译器)。GCC编译器能将C、C++语言源程序编译链接成可执行文件。

以上简单了解了常见的各种操作平台下的C开发环境,在本章后面将对后三种开发环境的使用进行简单介绍。需要读者注意的是,作为初学者不必在开发环境的使用技巧上花太多工夫,而应重点学习C语言各种语法要素。对于开发环境的使用,只要学会在开发环境中编写、编译链接代码,查找代码中的错误等操作即可。

3.2 使用Dev-C++

Dev-C++是由Bloodshed公司开发的一款C/C++的集成开发环境(IDE)。它对C和C++标准的支持非常好,该开发环境是一个共享软件,程序小巧,是基于 Windows 的 C 开发环境,适合初学者使用。在最新版中,增加对中文的支持。

3.2.1 Dev-C++操作界面

Dev-C++是一个共享软件,可从互联网下载。安装到计算机系统后,执行“开始/程序/Bloodshed Dev-C++/Dev-C++”便可启动该开发环境。图3-1为典型的操作界面,各界面元素的功能分别简介如下:

图3-1 Dev-C++开发环境

菜单栏和工具栏:这是Windows应用程序的标准元素,将源代码的编辑、编译运行等操作集中到菜单栏和命令栏中,方便用户操作。

工程管理:用于对创建包含多个源文件的应用程序进行管理。在本书中大多数应用程序都在一个源文件中,很少使用到工程管理。

源代码:在该子窗口中输入、编辑C源代码。编辑代码时,可使用“编辑”和“搜索”菜单中的相关命令。

报告窗口:在对源代码进行编译、调试时,将在“报告窗口”中显示进展情况、出错位置及原因等信息。

状态条:显示开发环境中的一些状态,如当前插入点所在位置、代码的总行数等。

提示

本书介绍C语言的相关知识,对于Dev-C++中支持C++的相关内容将不进行介绍。

3.2.2 设置选项

在使用Dev-C++开发C语言程序时,需对一些选项进行设置。具体的设置步骤如下:

1 在Dev-C++中执行“工具/编译选项”命令,打开如图3-2所示的“编译器选项”对话框。在“编译器”选项卡中,可以设置不同的编译器配置文件。可通过右侧的三个按钮来添加、删除、并重新命名为编译器设置。

图3-2 编译器

2 单击“代码生成/优化”选项卡,切换到如图3-3所示的界面,设置“支持所有ANSI C”标准为“Yes”。

图3-3 代码生成/优化

3 单击“目录”选项卡,切换到如图3-4所示的界面,可分别设置 Dev-C++中二进制文件、库文件、C包含文件等的具体位置。

图3-4 目录

4 单击“程序”选项卡,切换到如图3-5所示的界面,可设置不同的编译器、链接程序的名称。

图3-5 程序

类似的,还可以通过“工具/环境选项”命令对Dev-C++的使用环境进行设置,通过“工具/编辑器选项”命令对编辑器的编辑属性进行设置。

3.2.3 用Dev-C++创建C程序

用Dev-C++创建C程序的一般步骤如下:

1 执行菜单“文件/新建/源代码”命令新建一个源代码。对于大型程序,可新建一个工程,执行菜单“文件/新建/工程”命令,打开如图3-6所示的对话框。在该对话框中选择工程类型(如“Console Application”为控制台应用程序),输入工程名称,再选择工程类型(如“C工程”)。

图3-6 新工程

2 接着在代码窗口中输入C程序,如图3-7所示。

图3-7 输入源代码

3 保存源代码。执行菜单“文件/保存”命令打开如图3-8所示对话框,输入源文件名称,在“保存类型”中选择为“C source files (*.c)”保存为C源文件,而不是C++源文件。

图3-8 保存文件

3.2.4 编译程序

输入并保存C源文件后,需将其编译链接为可执行文件。在Dev-C++中执行编译命令即可完成编译和链接的工作,具体操作步骤如下:

1 执行菜单“运行/编译”命令,将弹出以下编译进度对话框,如图3-9所示。

图3-9 编译进度

2 若源代码无错误,顺利通过编译,等图3-9所示对话框的“Status”从“Compling…”显示为“Done”,单击该对话框的“关闭”按钮完成编译操作。

3 若在编译过程中发现程序有错误,图3-9所示编译进度对话框将自动关闭。在“报告窗口”的“编译器”选项卡中将显示错误代码所在的行、源文件名、错误信息等,如图3-10所示。同时,在代码窗口中出错行代码的底色将显示为红色,并在左侧的行号上显示一个图标。

图3-10 编译错误

执行菜单“视图/浮动报告窗口”命令可将停靠在开发环境下方的“报告窗口”浮动显示出来,如图3-11所示。

图3-11 报告窗口

在程序中查找编译器提示的错误,将其修改后重新编译,直到通过编译为止。

3.2.5 运行Dev-C++编译的程序

在 Dev-C++开发环境中,通过执行菜单“运行/运行”命令(或“运行/编译运行”命令)即可运行当前源代码编译后的可执行程序。

对于控制台程序,如果只是向控制台显示信息(不接收用户输入),执行这类程序时,用户将只看到Windows的命令窗口闪一下就消失了。为了让用户看清屏幕输出的内容,需要在C程序中添加一行代码。

一种方法是在return语句前添加getchar()函数。具体程序代码如下:

【程序3-1】欢迎程序

        1:  #include <stdio.h>
        2:
        3:  int main()
        4:  {
        5:      printf("欢迎使用C语言!\n");
        6:      getchar();
        7:      return 0;
        8:  }

当程序执行第5行的printf函数的输出操作后,执行到第6行的getchar函数,将等待用户按键,这时程序将停止下来,用户即可看到printf函数的输出结果,如图3-12所示。用户按回车键,将关闭该命令窗口。

图3-12 运行程序

另一种方法是在return语句前添加system(“pause”)语句。执行DOS命令PAUSE暂停程序,并提示用户“请按任意键继续…”。使用system函数时需要包含头文件“stdlib.h”,具体代码如下:

        1:  #include <stdio.h>
        2:  #include <stdlib.h>
        3:
        4:  int main()
        5:  {
        6:      printf("欢迎使用C语言!\n");
        7:      system("pause");
        8:      return 0;
        9:  }

当程序执行到第7行时将暂停,如图3-13所示。

图3-13 运行程序

用户也可切换到Windows的命令窗口状态运行编译生成的可执行文件。在命令窗口使用DOS命令CD进入到保存用户文件的目录,在DOS提示符下输入可执行程序文件名(如此处的“3-1”),按回车键即可执行,如图3-14所示。

图3-14 在命令窗口运行程序

提示

以上介绍了在Dev-C++中输入、编译、运行C程序的过程,这只是Dev-C++的很少一部分功能。有关Dev-C++更详细的使用介绍,读者可参考它的帮助文件。

3.3 使用VisuaI C++

Visual C++是Microsoft公司推出的用于支持Windows 95以上操作系统的C++开发环境。可使用Visual C++开发Win32应用程序、控制台程序、动态链接库等,另外,Visual C++还具有强有力的Internet支持。下面主要介绍使用Visual C++开发环境编写C程序的方法。

3.3.1 Visual C++操作界面

Visual C++ 6.0包含在Microsoft Visual Studio组件中。将其安装到计算机后,执行“开始/程序/Microsoft Visual Studio 6.0/Microsoft Visual C++ 6.0”可启动该开发环境。图3-15为典型的操作界面,各界面元素的功能分别简介如下。

图3-15 Visual C++ 6操作界面

菜单栏和工具栏:这是Windows应用程序的标准元素,它将源代码的编辑、编译运行等操作集中到菜单栏和命令栏中,方便用户操作。

工作区:Visual C++以项目工作区的方式来组织文件、项目和项目配置。通过项目工作区窗口可以查看和访问项目中的所有元素。

代码窗口:在该子窗口中输入、编辑C源代码。

输出窗口:在对源代码进行编译、调试时,将在“输出窗口”中显示进展情况、出错位置及原因等信息。

状态栏:显示开发环境中的一些状态,如当前插入点所在位置、代码的总行数等。

3.3.2 用Visual C++创建C程序

Visual C++以项目方式创建应用程序,每一个项目称为一个工程。必须为每个项目创建一个工作区,在工作区中再添加C或C++源文件。这对于创建复杂的Windows应用程序是非常好的一种方式,但对于本书的大部分程序,由于都只有一个C源文件,这种通过创建工作区,再添加C源文件的操作步骤就显得过于复杂了。

下面简单介绍一下在Visual C++中创建C程序的方法。具体步骤如下:

1 启动Visual C++ 6.0。

2 执行菜单“文件/新建”命令,打开如图3-16所示的“新建”对话框,还未创建工作区的情况下“工程”选项卡将显示出来。

图3-16 新建工程

3 在图3-16所示对话框的“工程”选项卡中,选择“Win32 Console Application”(Win32控制台程序为在命令提示符中执行的程序),在右侧“工程”中输入工程名称“Hello”,在“位置”中输入保存工程文件的目录。

4 在图3-16所示对话框中单击“确定”按钮,将打开如图3-17所示的向导窗口。

图3-17 Win32控制台程序向导

5 选择“An empty project”选项,单击“完成”按钮将创建一个空工程。如图3-18所示,左侧工作区窗口中各分类中都没有文件。

图3-18 空工程

6 再次执行菜单“文件/新建”命令,打开“新建”对话框。此时,因系统中已有一个工程,将显示“文件”选项卡,如图3-19所示。

图3-19 新建文件

7 在文件类型列表中选择“C++ Source file”,在右侧的“文件”中输入文件名,单击“确定”按钮即可打开代码窗口。

8 在代码窗口中输入C语言代码,如图3-20所示。

图3-20 输入代码

9 执行菜单“文件/保存”命令,将输入的代码存盘。

3.3.3 编译程序

输入并保存C源文件后,还需将其编译、链接为可执行文件。在Visual C++中分别执行编译命令和构建命令可完成编译和链接的工作,具体操作步骤如下:

1 执行菜单“编译/编译 hello.c”命令(其中的“hello.c”随不同的源文件名而变化), Visual C++将对当前C源代码进行编译。

2 若顺利通过编译,将在“输出窗口”中显示如图3-21所示的信息。提示用户生成的目标文件“hello.obj”,有0个错误和0个警告。

图3-21 顺利通过编译的输出窗口

3 若在编译过程中发现源代码有错误,将在“输出窗口”显示类似如图3-22所示的错误提示信息。在提示信息中可看到如下错误:

图3-22 编译错误提示

        C:\hello\hello\hello.c(5) : error C2143: syntax error : missing ';' before '}'

表示在源文件“hello.c”的第5行发现一个语法错误,在大括号“}”前面丢失了一个分号。

4 源代码顺利通过编译生成扩展名为“.obj”的目标文件后,执行菜单“编译/构件hello.exe”命令,将目标文件与库文件链接生成可执行文件。在“输出窗口”中可看到完成的提示信息,如图3-23所示。

图3-23 链接程序

提示

也可不通过编译操作,直接执行菜单“编译/构件hello.exe”命令,Visual C++将自动对源文件进行编译,然后链接生成可执行文件。

3.3.4 运行Visual C++生成的程序

在Visual C++开发环境中,通过执行菜单“编译/执行 hello.exe”命令可运行编译链接后的可执行程序。控制台程序将在Windows的命令窗口输出内容,并自动在程序执行结束后暂停程序,如图3-24所示。

图3-24 运行程序

用户也可切换到Windows的命令窗口状态运行编译生成的可执行文件。在命令窗口使用DOS命令CD进入到保存用户文件的目录,在DOS提示符下输入可执行程序的文件名(如此处的“hello”),按回车键即可执行,如图3-25所示。

图3-25 命令窗口运行程序

在默认情况下,Visual C++编译生成的目标文件(扩展名为“.obj”)、链接生成的可执行文件都保存在当前目录下的“Debug”子目录中。

使用Visual C++编写C程序时,将生成很多辅助文件(如工作区文件、编译链接文件时的辅助文件等)。编写一个简单的C程序将生成十多个文件,对初学者来说感觉很复杂。因此,不建议初学者使用Visual C++开发环境编写C程序。可在熟练掌握C以后,学习C++时过渡到该编程环境中。

3.4 Linux C语言开发环境

Linux 操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越 Windows 的安全性和稳定性。Linux 的大部分代码都是用 C 语言开发的,在Linux操作系统中进行程序开发时首选程序设计语言为C语言。本节简单介绍在Linux中使用C语言编写程序的方法。读者应该能熟练地操作Linux,若未使用过Linux操作系统则可跳过本节。在Windows或Linux操作系统中编写C语言程序的语法都是相同的。

3.4.1 Linux C语言开发环境的构成

Linux C语言开发环境与Windows的有所不同。在Linux下,一个完整的C开发环境包括以下三个部分:

函数库glibc:要构架一个完整的C开发环境,glibc是必不可少的,它是Linux下C的主要函数库。默认安装在/usr/lib中。

编译器GCC:GCC(GNU CCompiler)是GNU推出的功能强大、性能优越的多平台编译器。GCC 编译器能将 C、C++语言源程序、汇编语言程序和目标程序编译、连接成可执行文件。安装在/usr/bin中。

系统头文件glibc_header:缺少了系统头文件的话,很多用到系统功能的C程序将无法编译。安装在/usr/include中。

在安装Linux时,如果选择了安装全部软件包,或选择了安装开发软件包,安装程序都会将以上三部分安装到系统中。如果安装Linux过程中少装了这些包,就会无法编译C源程序。

3.4.2 代码编辑器

在 Linux 平台下,可用任意一个文本编辑工具编辑 C 源代码,常用的有 vi 和 emacs软件,推荐使用emacs。

1.文本方式下使用emacs

emacs软件既可在文本方式启动,也可在图形界面中启动。在文本方式输入以下命令:

        emacs hello.c

可启动emacs软件。打开一个全屏编辑窗口,并创建名为hello.c的文件,在该全屏编辑窗口输入C代码即可,如图3-26所示。

图3-26 文本方式的emacs

在文本方式下,不支持鼠标单击选择菜单的操作,需要用户熟练使用组合键来保存、退出编辑软件。

按组合键Ctrl+x后再按组合键Ctrl+s将保存编辑的文档。

按组合键Ctrl+x后再按组合键Ctrl+c将退出软件。如果编辑的文件未保存,将在下方显示提示,按“y”键存盘退出。

emacs软件的操作命令很多,读者可参考帮助中的说明逐步掌握这些命令。

2.图形界面中使用emacs

emacs 软件也可在图形界面下使用,并且在图形界面中使用时,可通过鼠标单击菜单操作相关命令,方便用户进行操作,不用去背那些操作命令。

在Linux图形界面中,单击面板中的“主菜单”按钮(类似Windows中任务栏的“开始”按钮),在弹出的菜单中选择“编程/Emacs”,即可启动emacs软件,如图3-27所示。

图3-27 图形界面中启动emacs

图形界面中的emacs软件如图3-28所示,可用鼠标单击窗体上方的菜单命令,在菜单下方还提供了一个工具栏,在最下方为emacs软件的提示和命令显示区域,中间为编辑区。

图3-28 图形界面中的emacs

如图3-29所示,单击菜单“Option”,在下拉菜单中选择“Syntax Highlighting (Global Font Lock mode)”命令,则编辑区中的C程序将根据关键字的不同分别用不同的颜色来显示。

图3-29 高亮语法显示

3.4.3 GCC编译器

GCC是Linux平台下最重要的开发工具。它是GNU的C和C++编译器,其基本用法为:

        gcc [options] [filenames]

注意

Linux 的文件名要区分大小写。在本书中为了方便阅读,在文字中都将 GCC写为大写字符,在Linux中使用则必须输入为小写字母。

其中两个参数的作用为:

options为编译选项,GCC提供的编译选项非常多,可控制编译的结果。

filenames为需要处理的文件名列表。

GCC提供了很多的编译选项,下面介绍几个常用选项。

最简单的编译方法是不指定任何编译选项。例如,使用以下命令编译hello.c文件:

        gcc hello.c

执行以上命令后,将对hello.c文件进行编译,将在当前目录生成一个可执行文件a.out。

若需要将可执行文件指定为不同的名称,需要使用-o编译选项。例如:

        gcc –o hello hello.c

执行以上编译命令,将对hello.c文件进行编译,在当前目录生成一个可执行文件hello。

若只需GCC 将源文件编译为目标代码,而不连接为可执行操作,则可使用-c 选项,例如:

        gcc –c hello hello.c

执行以上编译命令,将对hello.c文件进行编译生成目标文件hello.(o 不是可执行文件)。

使用-S(大写字母)编译选项,可让GCC在为C代码产生了汇编语言文件后,停止编译。GCC产生汇编语言文件的默认扩展名是.s,例如:

        gcc –S hello.c

执行以上编译命令,将生成名为hello.s的汇编语言文件。

3.4.4 在emacs中编译C程序

在emacs软件Tools菜单中有一个Compile命令,可对编辑的C代码进行编译,从而省去了用户转到文本方式执行GCC命令编译的过程。

默认情况下,执行菜单“Tools/Compile”命令时,将在emacs窗口下方显示如下提示信息:

        Compile command: Make

这时,将调用make命令对C源代码进行编译操作。其实,make命令并不会对C文件进行编译,而是通过一个Makefile文件,控制项目中多个C源文件。make命令是用来自动维护目标文件的。与手工编译和连接相比,make 命令的优点在于它只更新修改过的文件(在Linux中,一个文件被创建或更新后有一个最后修改时间,make命令就通过这个最后修改时间来判断此文件是否被修改),而对没修改的文件则置之不理,并且make命令不会漏掉一个需要更新的文件。

而对于本书中的程序,大部分都只有一个源文件,不需要读者再创建另外的Makefile文件来进行控制。因此,需要将编译命令改为直接调用GCC编译器。

使用emacs打开.emacs文件(该文件保存emacs的配置信息),在该文件中找到类似以下的语句:

        (setq compile-command "make")

将其修改为以下形式(若.emacs文件中没有找到上面的语句,也可直接在该文件最后添加以下语句):

        (setq compile-command "gcc –o")

这样,在emacs软件中执行菜单“Tools/Compile”命令时,将在emacs窗口下方显示如下信息:

        Compile command: gcc -o

在“gcc -o”后面输入编译生成可执行文件的名称和需要编译的C代码文件,如图3-30所示。

图3-30 编译命令

在emacs软件的提示窗口中将显示编译的过程及其他相关信息,如图3-31所示。编译完成后,在文本方式切换到/home/root中可看到编译生成名为“hello”的可执行文件。

图3-31 完成编译

3.4.5 在Linux中编写C程序

下面使用第2章中的实例,演示在Linux中进行C程序编辑、编译、运行的全过程,具体步骤如下:

1 在Linux图形界面中启动emacs软件,输入以下代码,如图3-32所示。

图3-32 在emacs中录入代码

        1:  #include <stdio.h>
        2:  #define PI 3.1415926  /*定义常量*/
        3:
        4:  float area(float r);  /*声明计算面积的函数原型*/
        5:  float perimeter(float r);
        6:
        7:  int main()
        8:  {
        9:       float  r;
        10:      float s,l;
        11:
        12:      printf("Please input radius:");
        13:      scanf("%f",&r);
        14:
        15:      s=area(r);
        16:      l=perimeter(r);
        17:
        18:      printf("Radius=%.2f,Area=%.2f \n",r,s);
        19:      printf("Radius=%.2f,Perimeter=%.2f \n",r,l);
        20: }
        21:
        22: float area(float r)
        23: {
        24:       float s;
        25:
        26:       s=PI*r*r;
        27:       return s;
        28: }
        29:
        30: float perimeter(float r)
        31: {
        32:       float l;
        33:
        34:       l=2*PI*r;
        35:       return l;
        36: }

2 在emacs窗口中执行菜单“Tools/Compile”命令,在下方命令提示框中将GCC命令补充为以下代码:

        Compile command: gcc –o test test.c

将当前C程序test.c编译生成可执行文件test。

3 若源代码输入正确,编译通过后将在emacs窗口中显示如图3-33所示提示信息。

图3-33 编译完成

4 切换到Linux的文本模式,使用Linux的命令切换到用户生成可执行文件的目录,输入ls命令可看到保存的C源程序test.c,以及编译生成的可执行文件test,如图3-34所示。

图3-34 编译生成的文件

5 输入以下命令执行程序:

        ./test

注意

在 Linux 下,若要执行现行目录下的程序,也需要指明路径,可以使用一个点表示当前路径。

可看到提示用户输入半径,输入半径后,将显示圆的面积和周长,如图3-35所示。

图3-35 程序执行结果

另外,使用emacs将C源代码编辑完成后,也可在文本方式使用GCC编译器编译生成可执行程序。在文本方式输入以下命令:

        gcc –o test1 test.c

将C源文件test.c编译生成可执行文件test1。编译完成后,使用ls命令可看到编译连接的可执行文件test1,如图3-36所示。

图3-36 文本方式编译C程序