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

1.3 C语言简介

C语言是贝尔实验室Dennis Ritchie 在1973年设计的一种程序设计语言,其目的是用于写操作系统和系统程序,初期用在PDP-11计算机上写UNIX 操作系统。20世纪70年代后作为UNIX的标准开发语言,C语言随着UNIX 系统流行而得到越来越广泛的接受和应用。20世纪80年代后,它被搬到包括大型机、工作站等许多系统上,逐渐成为开发系统程序和复杂软件的一种通用语言。随着计算机的蓬勃发展、处理能力的提高和应用的日益广泛,越来越多的人参与了计算机应用系统的开发工作,这就需要适合开发系统软件和应用软件的语言。C语言能较好地满足人们的需要,因此在计算机软件开发中得到了广泛的应用,逐渐成为最常用的系统开发语言之一,被人们用于开发微型机上的各种程序,甚至是非常复杂的软件系统。

在使用最多的以Intel 及其兼容芯片为基础的计算机上,也有许多性能良好的C语言系统可用。包括Borland 公司早期的Turbo C和后续Borland C/C++系列产品,Microsoft(微软)公司的Microsoft C和后续Visual C/C++系列产品,还有其他的C/C++语言系统产品,使用较广的有Watcom C/C++和SymantiC/C++等,此外还有许多廉价的和免费的C语言系统。其他计算机也有多种C语言系统。各种工作站系统大都采用UNIX 和Linux, C语言是它们的标准系统开发语言。各种大型计算机上也有自己的C语言系统。

1.3.1 C语言的特点

C语言之所以能被世界计算机界广泛接受是由于其自身的特点。总体上说,其设计把直到20世纪70年代人们对于程序语言的认识和开发复杂系统程序(例如操作系统等)的需要成功地结合起来。C语言的主要特点包括以下几点。

C语言比较简单,是一个比较小的语言。学习时入门相对容易,知道很少东西就可以开始编程。C语言很好地总结了其他语言提出的程序库概念,把程序设计中许多需要的功能放在程序库(称为标准函数库)里实现,如输入/输出功能等,这就使语言本身比较简单,编译程序的实现比较容易。人们早已用C语言写了它自己的编译程序,这种程序很容易移植到各种不同的计算机上,促进了C语言的发展。

C语言提供了丰富的程序机制,包括各种控制机制和数据定义机制,能满足构造复杂程序时的各种需要。方便易用的函数定义和使用机制使人可以把复杂的程序分解成一个个具有一定独立性的函数,以分解程序的复杂性,使之更容易控制和把握。

C语言提供了一套预处理命令,支持程序或软件系统的分块开发。利用这些机制,一个软件系统可以较方便地先由几个人或几个小组分别开发,然后再集成,构成最终的系统。这种工作方式对于开发大软件系统是必须的,人们用C语言开发了许多规模很大的系统。

C语言的另一特点是可以写出效率很高的程序。人们之所以在一些地方继续使用汇编语言,就是因为高级语言写出的程序效率低一些。这样,开发效率要求特别高的程序时就只能使用汇编语言。C语言的基本设计使得用它开发的程序具有较高的效率,它还提供了一组比较接近硬件的低级操作,可用于写较低级、需要直接与硬件打交道的程序或程序部分。这些特点使C语言常被当做汇编语言的“替代物”,从而大大提高了开发低层程序的效率。

C语言的设计得到世界计算机界的广泛赞许。一方面,C语言在程序语言研究领域具有一定价值,它引出了不少后继语言,还有许多新语言从C语言中汲取营养,吸收了它不少的精华。另一方面,C语言对计算机工业和应用的发展也起了很重要的推动作用。正是由于这些贡献,C语言的设计者获得世界计算机科学技术界的最高奖——图灵奖。

1.3.2 C语言的发展和标准化

在设计C语言时,设计者主要把它作为汇编语言的替代品,作为写操作系统的工具,因此更多强调的是其灵活性和方便性,语言的规定很不严格,可以用许多不规则的方式写程序,因此也留下了许多不安全因素。使用这样的语言,就要求编程序者自己注意可能的问题,程序的正确性主要靠人来保证,语言的处理系统(编译程序)不能提供多少帮助。随着应用范围的扩大,使用C语言的人越来越多(显然其中大部分人对语言的理解远不如设计者), C语言在这方面的缺陷日益突出。由此造成的后果是,人们用C语言开发的复杂程序里常带有隐藏很深的错误,难以发现和改正。

随着C语言应用的发展,人们更强烈地希望C语言能成为一种更安全可靠、不依赖于具体计算机和操作系统(如UNIX)的标准程序设计语言。美国国家标准局(ANSI)在20世纪80年代建立了专门的小组研究C语言标准化问题,这项工作的结果是1988年颁布的ANSI C标准。这个标准被国际标准化组织和各国标准化机构所接受,同样也被采纳为中国国家标准。此后人们继续工作,于1999年通过了ISO/IEC 9899:1999标准(一般称为C99)。这一新标准对ANSI C做了一些小修订和扩充。

语言改造非常困难。虽然人们已经认识到原来C语言中的一些不足之处。但一方面已有的东西,主要是新标准出现前人们已开发的各种程序和软件是一笔巨大财富,不能轻易丢掉,彻底改造要耗费极大的人力和物力,也不可能做到;另外,一批老用户已养成习惯,不可能在一朝一夕改变。因此,即使想建立一个新标准,也要尽可能保持与原形式的兼容性,作为对现实的退让,ANSI C标准基本上容许原形式的C程序同步。但新标准中强调:旧事物终将被抛弃,希望写程序的人尽量不要再使用它们。

今天学习C语言和程序设计,理所当然应该采用新的形式,不应该学习那些过时的东西。原因主要有两条:① 这些旧东西终归将被抛弃,养成使用它们的习惯后将来还要改,那时将更加费时费力,也毫无意义;② 这些过时的东西确实不好,虽然有时用它们能少写几个字符,但往往会阻碍编译系统对程序的检查。人很容易犯错误,在从事写程序这种复杂工作时尤其如此。阻止编译检查就是拒绝计算机帮助,其实际后果无法预料,可能代价惨重并且为程序中实际存在的隐藏错误耗费更多的时间和精力。