第1章概述作为本书的开始,我们不涉及C语言的语法和使用细节,先来看一看这门语言的相关背景,以及其在计算机程序中举足轻重的地位。然后,为给后面的学习作准备,来看看如何建立C语言的开发环境。最后,抛砖引玉,说说笔者自己的C语言学习经验。1.1C语言简介本节先来看一看C语言的相关背景介绍。在众多的计算机语言之中,它到底处于一个什么样的位置?相对于其他计算机语言而言,它有什么优势和弱点?另外,C语言适合做些什么样的软件开发?带着这些问题开始本节的学习。1.1.1C语言的位置图1.1是计算机语言发展过程的一个简单的示意图,只展示了一些主流的计算机语言的出现时间和顺序,不是很全,但是足以显示C语言与其他语言的关系了。图1.1计算机语言发展史(简)第1章概述·3·从图1.1中可以看出,所有的高级语言都起于Fortran,之后就有不同的分支了。C语言也是其中的一个分支,主要起源于BCPL语言(BasicCombinedPogrammingLanguage),是对BCPL语言的一种简化。C语言之所以被称为C语言,是因为BCPL语言被称为B语言,C语言不能再取BCPL的首字母了,因此,取BCPL的第二个字母C,C语言因此得名。C语言诞生于20世纪70年代,之后不断完善、标准化。目前流行的C语言编译系统大多数是以ANSIC(美国国家标准协会(ANSI)对C语言发布的标准)为基础进行开发的。但不同版本的C编译系统所实现的语言功能和语法规则略有差别。现在比较通用的是1990年,国际标准化组织ISO(InternationalOrganizationforStandards)接受的1989年的ANSIC标准,并以它作为ISOC90标准——ISO/IEC9899:1990。1.1.2C语言的优缺点任何一种计算机语言都有它的优势和不足,C语言也是如此。不要以为C语言都那么老了,是不是没用了,也不要以为C语言是万能钥匙,什么问题都能解决好。1.C语言的优势C语言的优点细数起来,估计手指加脚趾都不够用,但是这些优点可以总结为一点,那就是“灵活”。C语言的灵活主要体现在同一件事情可以通过好几种方式实现,并不会定死什么问题非得用什么方式来解决。C语言之所以灵活,是因为它有下面这些属性,保证了它天生就是一种灵活的语言。结构丰富多变:C语言提供了三种基本的程序设计结构,通过这三种程序设计结构,就能够完成所有的计算机逻辑。而且每种结构中,又有略有差别的不同的形式,你可以选择自己喜欢的任意形式来完成需要的功能。提供了多种基本运算:C语言提供了30多种运算符号,分为15个运算优先级,不仅可以完成基本的数学运算,还可以完成类似于计算机底层操作的位运算。有的运算符号在不同情况下的含义和使用方式也是不同的,而且可以通过强制结合来改变运算符的优先级。丰富的数据类型:数据类型决定了一种语言可以用来操作什么样的数据。C语言的数据类型真可谓丰富,从基本的几种数据类型,到复杂数据类型,再到可以自定义的数据类型。从某种程度上来说,C语言可以用来操作任何类型的数据。程序设计自由,语法限制不大:C语言代码在书写的时候,从书写格式到代码组织限制都不是很大,所以写代码的风格可谓百花齐放,什么样的都有。只要符合最基本的要求,无论你怎么写,都是对的。只不过代码风格不好,不利于阅读和理解。对于上面提到的C语言的各种优点,在没有接触C语言之前,可能大家还体会不到。不要紧,相信大家学完这本书之后,回过头来看看这一部分内容,一定会有所感悟的。2.C语言的不足一个事物,往往最强的地方也就是它最弱的地方。C语言的弱点也正是由于它的“灵活”造成的。因为太灵活了,怎么样都行,对计算机的控制太过自由,稍不留意就会出现错误!所以,能灵活运用C语言,也是一种能力啊。第1篇一切从基础开始·4·1.1.3C语言适合什么开发由于C语言本身的灵活性,导致它可以很好地处理复杂和具有差异的环境。因此,它至少适合进行下面三类软件的开发。1.多平台通用软件所谓多平台通用软件,就是指这个软件可以在很多系统上使用。例如,如果想让你写的同一个程序很好地运行在DOS、Windows98、WindowsXP、WindowsCE、Linux、UNIX等多个操作系统上,C语言确实是个不错的选择。知道Apache吗?它是一个开源Web服务器工程,其中的HTTP服务器可以运行于很多平台,Windows、Linux和UNIX都是可以的,这个服务器就是用C语言开发的。2.操作系统由于C语言可以很自然地与汇编语言结合,又比汇编语言好用,能够很灵活地控制计算机硬件,因此很适合开发操作系统。Windows很老的版本都是用C语言写的,之后改用C++了,不过C++是兼容C语言的。Linux和UNIX系列的操作系统内核几乎都是用C语言写的,而且很多运行在板子上的嵌入式操作系统基本都是用C语言结合汇编写的。如果你真想做个操作系统,C语言绝对可以胜任。3.复杂运算软件之所以说C语言适合进行复杂计算软件的开发,是因为:(1)复杂计算软件本身很单纯,只需要计算机进行计算就可以了;(2)C语言本身有丰富的运算功能,完全可以实现复杂计算功能;(3)因为C语言是一种接近底层语言的高级语言,所以它写出来的程序在计算机上的运行效率很高。所以,要想做一个需要复杂而高效计算功能的软件,选择C语言绝对不会令你失望的。如果你经常做科学计算,用过MATLAB软件,它其中一部分也是用C语言写的。1.2C语言的开发环境“工欲谋其事,必先利其器”。要想学好C语言,选择一个好的C语言开发环境是很有必要的,而且是首要任务。在本节中,来看看C语言的开发过程,教大家学习Windows平台上主流的C语言开发工具VisualStudio的基本使用方法。1.2.1编辑器、编译器和链接器编辑器、编译器和链接器是使用C语言进行开发所需要的三个最基本的工具,而且也是最小的工具集,缺一不可。从图1.2所示的一个可以运行的程序的生成过程,就可以看出编辑器、编译器和链接第1章概述·5·器在这条可执行程序“生成链”上所处的位置了。从键盘一句一句敲出代码到一个可以在操作系统上运行的程序,必须经过这三个工具的处理才可以。接下来逐个看一看这三个程序的作用。图1.2可执行程序的生成过程1.编辑器编辑器的作用就是将我们在键盘上的敲击转换成写有代码的文件,这个文件被称为程序源文件,或者直接叫做源文件。这个编辑器在形式上很像是一个记事本程序,可以在上面添加、删除、插入字母或者文字,并且可以将这些字母和文字保存到一个文件中。其实,记事本是可以作为C语言编辑器的,我们在记事本上编辑的字母和文字就是将要学习的C语言代码。这些代码保存到一个文件中,供下次编辑或者直接交给编译器去处理,这个文件就是源文件。不过,记事本可以算是最简单和最不专业的C语言编辑器了!一般而言,专业的C语言编辑器都有其他方便C语言代码编辑的功能。例如,最基本的语法高亮功能,所谓语法高亮,就是程序中不同用途的字母或者文字会以不同的颜色显示出来,让你一看就知道正在写的代码是做什么用的。越高级、越专业的C语言编辑器,越能最大程度地方便你写C语言代码。其实,只要能将键盘的输入转换成源文件的就可以称为编辑器。一般的编辑器也是可以编写C语言代码的,只不过,比起专业的C语言编辑器会显得难用和不舒服一点。2.编译器编译器的作用是将保存着我们所写代码的源文件,转换成一种称为目标文件的二进制文件。源文件是我们能看懂的,是给我们用的。而二进制文件是计算机能看懂的文件,是给计算机用的。计算机根据二进制文件中的内容决定该做什么事情,不该做什么事情。在这个转换过程中,编译器先对源文件中的内容进行扫描,根据C语言的语法要求,逐个检查源文件中出现的每一个字母或者文字。如果这些文字符合C语言的语法要求,那么它就根据这些字母和文字的含义将其转换成计算机可以识别的二进制代码,并将其按照一定的格式保存在二进制文件中。如果某些地方的字母或者文字不符合C语言的语法要求,那么编译器将报告所有不符合的地方,不再生成二进制文件,只有改正所有不符合语法要求的地方,让编译器重新对改正的源文件进行转化,才可以生成二进制文件。编译器对源文件的转换过程在计算机中有个专业的名字,叫“编译”。编译器也因此得名,表示编译的工具。第1篇一切从基础开始·6·3.链接器一般所写的程序最终是要运行在某个操作系统上的。因此,即使是一个很简单的程序也需要操作系统来处理很多事情,才能使程序正常运行。操作系统往往会提供一些被称为开发库的二进制文件,编译器产生的目标二进制文件只有和这些库二进制文件结合才能生成一个可执行程序,才能使我们写的程序正常地运行于某个操作系统之上。另外,有的时候我们可能会开发一些专业的或者功能很复杂的软件,这类软件要从头做,往往很麻烦。这个时候,就得看看其他公司或者业界有没有提供此类功能实现,可以买过来使用。往往买过来的也是一堆库二进制文件,只有把这些库二进制文件和编译器产生的目标二进制文件结合起来才能产生需要的可执行程序。链接器所做的工作就是将所有的二进制文件链接起来融合成一个可执行程序,不管这些二进制文件是目标二进制文件还是库二进制文件。链接器将二进制文件融合的这一过程,在计算机中也有一个专业的名字——“链接”,链接器也因此得名,表示链接的工具。1.2.2集成开发环境按照前面介绍的可执行程序的生成过程,要想用C语言写一个可以真正运行于某个操作系统之上的程序,至少需要编辑器、编译器和链接器三个开发工具。集成开发工具也是一个工具,不过它的功能更强大,因为它集成(包含)了编辑器、编译器、链接器和其他用于开发的工具。1.直观印象先来直观地感受一下,一个真正的集成开发环境是什么样的。图1.3所示就是一个Windows操作系统上的集成开发环境,Windows上的其他集成开发环境,以及其他操作系统上的集成开发环境基本都长这个样子。图1.3集成开发环境集成开发环境也是一个程序,它是一个用于开发的程序。图1.3显示的集成开发环境第1章概述·7·就是一个标准的Windows应用程序,有点像我们经常使用的OfficeWord。一个集成开发环境基本都是以窗口的形式展现在我们面前的,如图1.3所示。在这个窗口中一般会包含三个部分:菜单栏、工具栏和子窗口。图1.3中最上边的“文件”、“编辑”等一行就是菜单栏,菜单栏之下的一行图标组成了工具栏,工具栏之下被分成一块一块的就是子窗口了。基本上所有的集成开发环境都是由这三部分组成的,只是组成的方式不同而已。例如,菜单栏中的内容、工具栏中的图标的位置和数目、子窗口的大小和数目等会有所不同。大家先过一下眼就好,后面会讲到如何使用这个集成开发环境。2.集成开发环境中的编辑器集成开发环境是用来更好地开发程序的,它一定会包含生成一个可执行程序所必需的三个基本工具。这里先来看看第一个工具——编辑器在集成开发环境中的什么地方!集成开发环境中的子窗口,往往有一个或者多个会用来完成编辑器的编辑、显示功能。菜单栏和工具栏中的某些菜单和按钮会用来完成编辑器的文件新建、保存等功能。图1.4所示就是图1.3所示的集成开发环境中编辑、显示代码的编辑器。这个编辑器算得上一个高级的或者说专业的C语言编辑器了。因为至少从图1.4中可以看出,所写的代码中有不同颜色的单词,表明这个编辑器可以用颜色区分我们所写的代码中的不同部分,方便代码的阅读和编辑。其实它还有很多更强大的功能呢,这里就不一一赘述了,留待读者自己发掘吧!这个集成开发环境中哪些菜单和工具是用在编辑器中的,在后边讲这个工具使用的时候,再详细讲解。这里大家知道集成开发环境中有一个子窗口是用于编辑代码的就可以了,它是编辑器的核心,也是我们以后会经常使用的。3.集成开发环境中的编译器和链接器找到了集成开发环境中的编辑器以后,再来看看集成开发环境中的编译器和链接器吧!集成开发环境中有一个子窗口是和编译链接有关系的,它可以将编译器和链接器在编译链接过程中的报告全部显示出来。这个窗口一般被称为输出窗口,因为编译链接的所有报告都是通过它输出的。图1.3所示集成开发环境的输出窗口如图1.5所示