1.2 怎样用C语言编程
1.2.1 学习C语言编程都需要什么
正如前面所描述的那样,高级语言是一种以文字符号描述的,比较接近于人类自然语言以及数学语言的逻辑体系。这种语言是供人(程序员)来描述、解决问题的方法,并被“翻译”成机器语言让计算机执行的。这个特性决定了它拥有两个阅读者,即它不但是供机器或编译器阅读的,同时也是供人阅读的(适当的场合也是可以“朗读”的)。使用这种语言首先需要一个书写工具(术语叫编辑器)——一个具有类似Windows操作系统提供的“记事本”程序功能的软件,供人编写和修改代码。MS Word等软件也能完成这个任务,但那些花里胡哨的功能比如字体字号颜色等对于编译器没有实际意义,编译器从来不会因为代码写得很漂亮就放弃对语法错误的检查。我们真正需要的仅仅是一个文本编辑器。
在利用文本编辑器写完了用于描述解决问题的代码之后,还需要一个专门的软件把我们编写的代码翻译成机器语言,并组装成一个可执行文件(.exe),这种软件比较专业的称呼是“编译器”。
除此之外,您所需要的大概只有一台能正常运行的计算机,以及本书了。
现代的编译器通常都搭配一个免费的编辑器,并且功能远超过两者之和。这种软件,目前流行的名字叫IDE,本书的配套光盘提供了Dev C++这种IDE。当然也可以使用其他的IDE比如Visual C++、Turbo C 2.0等来编辑、运行本书的大部分代码。
总之,学习C语言编程只需要准备以下几样东西。
■ 能够正常运行的计算机,
■ 任何一种IDE(用于编辑、编译、调试,本书配套光盘提供了Dev C++),
■ 本书。
本书及配套光盘只提供了后面两项,第一项所要求的设备尚请读者自备。
1.2.2 最简单的C语言程序的基本结构
最简单的C语言程序如下:
程序代码1-1
这是C语言源程序的实质性最简框架,相当于耶和华说的“要有光”。所以它的内容务必记住,否则C世界中的一切都无从谈起。
从编程规范的角度来说,这段代码的任何部分都是所有C源程序中所必不可少的(1)。任何C语言程序都是以此为基础搭建的。而main前面要写“int”及后面括号里写“void”是C语言的规定。
此外要说明的是“()”内除了可以写“void”外还有另外一种形式,“return”后面的0在需要时也可能写成其他整数,但目前对这两点还没有关注和深究的必要。
main()是程序开始执行的地方,所以每一个C语言源程序都必须有且只能有一个main()(2)。main是main()函数的函数名。在C语言源代码中,函数名在绝大多数情况下一定紧随一对小括号“()”。而“{}”括起来的部分叫做函数体,函数体内写的是要计算机完成的任务。
“return 0;”是C语言的一个语句,C语言语句后面通常有一个“;”作为语句结束标志。
上面的程序虽然能够编译执行,但除了传递给操作系统一个0值以外,没有任何其他实质操作。为了让程序能够完成一定的实际任务,必须向其中添加执行任务的语句以及其他必要的程序成分。为此将上面程序修改为:
程序代码1-2
这段程序代码的功能是在标准输出设备上输出一行文字——"你好,C!",然后把光标移至下一行的开头。
这个功能是通过“printf("你好,C!\n");”这条语句实现的,C语言的每条语句都以“;”作为结束标志。上面代码中的“return 0;”也是一条语句。
“printf("你好,C!\n");”语句是一个函数调用语句,目前还无法也没有必要详细解释什么叫做函数调用,读者现在只需把这句话理解为在程序中加入一段事先已经写好了的程序段就可以了。
由于使用了一段事先写好了的程序段(这是编译器提供的),因此在代码中必须对这段程序段的来龙去脉有所交代,具体地说就是解释清楚“printf”这个“单词”(暂且这么称呼它,其正式的称呼不叫“单词”而称之为“标识符”)的含义,“#include<stdio.h>”这行的作用就在于此(3)。需要注意的是这一行写的并不是C语言的语句,因此后面没有“;”。它是一条编译预处理命令,主要作用是让编译器在编译之前做些适当的准备工作。
对于初学者来说,由于几乎所有程序都要用到printf()函数调用语句,所以#include<stdio.h>这一行几乎总是必须的。即使在不需要的场合,加上这行也没有任何坏处。
需要说明的是,有些编译器(如TurboC 2.0)在用到printf()函数时,#include<stdio.h>这行可以省略,但并不是所有的编译器都是那么宽宏大量,而且即使是TurboC 2.0,在用到其他一些不那么常用的“单词”(“标识符”)时,还是必须写上类似的这一行命令。
有鉴于此,建议在写程序的时候养成一个习惯,首先写这一行。这不仅会加强程序的可移植性(在其他编译器上也能编译运行),也体现了程序员的严谨——对程序中出现的每一个“标识符”负责的态度。更现实的好处是可以减少许多犯错误的机会。
此外也可以把这条预处理命令写成如下形式:
对初学者来说这两者几乎没有什么差异,目前没有必要追究其区别。
printf()函数的功能是在标准输出设备(显示器)上依次输出""内的一连串字符(术语叫字符串),你也可以尝试着把""里的字符换成其他字符输出。
有些字符在源程序中是写不出来的(键盘上没有对应的键),有些虽然可以键出但会违反对源代码的语法格式要求,以至于可能无法编译,比如“回车换行”键,这样的特殊字符需要用另外的方法来表示。如\n表示“回车换行”这个字符。
练习
编写一个最简单的C语言程序。
1.2.3 Dev C++
1.Dev C++简介
Dev C++是一种Windows环境下的用于开发C/C++程序的集成开发环境(Integrated Development Environment,IDE(4))。所谓“集成”,是指具备“编辑”、“编译”、“调试”甚至“版本控制”等软件开发所需要的各项功能(5)。换句话说,你可以使用Dev C++编写源代码,可以利用Dev C++把源代码编译成可执行文件,也可以用Dev C++查找修正程序中的错误,甚至可以用它直接运行编写的程序而不必在操作系统中去手工运行。
Dev C++对C语言最新标准的支持程度较高,这样有利于对C语言最新特性的学习和使用。此外它是一个自由软件,不需要支付费用去购买。
Dev C++可以开发Win32控制台程序或GUI(6)程序,同样可以开发动态链接库(DLL)或静态函数库。
Dev C++的使用环境是Windows 95或更高的操作系统(Windows98、NT、2000、XP等),对硬件的最低要求是8MB内存,30MB可用硬盘空间,100MHz以上的CPU。
Dev C++由两个主要部分组成,图形界面部分及核心的编译器。通常Dev C++的编译器是基于GCC(7)的MinGW,也可以选择其他编译器作为Dev C++的编译程序,不过这是以后的事情了。
2.Dev C++的安装
安装时可以选择安装类型为“典型安装”,此外可以自己选择Dev C++的安装目录。其余的只要选择“下一步”就可以了。
3.Dev C++的运行
安装完毕就可以使用Dev C++了,它启动后的程序界面如图1-5所示。
图1-5 Dev C++的启动
启动后选择菜单“File/New/Project…”,(或者单击工具栏上的Project按钮)建立一个“Project”之后,就可以编写程序了。在这里,需要解释一下所谓的“Project”的概念。
所谓的“Project”,是指编写一个应用程序所需要的所有资源的总和。对于比较大的应用程序,仅仅有一个源程序是不够的。但目前的学习阶段,通常只有一个源程序文件就足够了。尽管只需要一个源程序文件,但在Dev C++中依然需要从建立一个“Project”开始,如图1-6所示。
图1-6 选择程序的类型、所用语言及为Project取名
建立“Project”时还需要选择程序的类型(此处选控制台程序,Console Application),选择所用语言(此处为C Project),此外最好在Name文本框中为你的Project取一个有意义的名字,如“练习一”(使用Dev C++提供的缺省名字也可以,但这基本上不是一个好的习惯),单击“OK”按钮,则进入编辑状态,如图1-7所示,在编辑框内出现的是Dev C++为我们自动搭建的C语言源程序框架(内容如程序代码1-3所示)。
图1-7 代码的编辑窗口
程序代码1-3
其中,
毫无疑问也是一个“编译预处理命令”。可能大家能够猜到,这行的出现是因为后面出现了“system”这个单词(标识符)。
把“int argc,char *argv[]”改写为“void”(8),然后在system(“PAUSE”);的前一行键入“printf(“你好,C!\n”);”。至此,第一个C语言程序的代码编辑就完成了(见程序代码1-4)。
程序代码1-4
编辑完成后首先要保存,这一点尤其重要!Dev C++保存源文件默认的名字是main.c。好的习惯是自己取一个独特的名字。此外要说明的是C语言源文件的扩展名一般是.c,但这不是必须的、更不是C语言的规定,只是一个约定俗成的习惯而已。如果你一定要为C语言源文件取一个特例独行的扩展名的话,可能会招来其他人的反感,他们可能会说你违反了C语言的规定,但其实C语言并没有这样的规定。
保存之后的下一步是编译,单击“编译”按钮(或使用快捷键[Ctrl]+[F9]),理论上还应该有个链接的步骤,但在Dev C++中它与“编译”合在一起了。编译之后,磁盘上将生成与源程序同名的可执行文件(扩展名为.EXE)。这时就可以运行程序了。单击工具栏上相应的按纽
,或使用快捷键[Ctrl]+[F10],在编译器环境下直接运行程序,运行的结果将在显示器上显示:
“system("PAUSE");”的作用是在程序输出结果之后暂停,防止程序运行后立即返回程序编辑界面,这样可以让程序编写者从容地查看程序的输出结果。
至此可以看出,简单的C语言程序的开发过程大致为以下3步。
1.编辑(源代码),
2.编译(以及连接),
3.执行。
在上面任何一个步骤中,都可能会发生错误,都可能必须返回第一步(大多数情况如此)重新进行,这个步骤叫调试(Debug)。
练习
1.自己安装Dev C++。
2.启动Dev C++,建立一个名为“练习”的Project,并把Project中的源程序文件改名为lx.c。
3.对前面的Project进行保存、编译。查看生成的可执行文件的位置,并运行它。