C Programming: A Modern Approach

第1章 C语言简介

2020-02-20  本文已影响0人  橡树人

英文原版:P1

什么是C语言?
简单的答案:一种广泛使用的编程语言,该语言是由贝尔实验室在20世纪70年代早期开发。
这个简单的答案没有体现出C语言独有的风格。
在深入C语言的细节之前,先看一看C语言从哪里来,C语言为啥而设计,这么多年来发生了哪些变化等。然后,讨论一下C语言的长处和缺点,基于C语言如何才能获得最多的好处等。

1.1 C语言的历史

快速浏览一下C语言的历史:从它的起源,到它成为标准语言的时代,再到它对新近产生的语言的影响。

起源

C语言是UNIX操作系统的副产物,UNIX操作系统是由Bell实验的Ken Thompson、Dennis Ritchie等人开发的。

1969年,Thompson一个人使用汇编语言编写了UNIX的初始版本,该初始版本可在Dec PDP-7计算机上运行。
Dec PDP-7计算机是一台早期的微型计算机,内存只有8K个字。

跟同时代的其他操作系统一样,UNIX是用汇编语言编写的。由于使用汇编语言编写的程序通常很容易出bug,很难维护,UNIX也不例外,所以Thompson决定为后续的Unix开发一种更高级的语言。
Thompson基于BCPL设计了B语言。BCPL是一种在20世纪60年代中期开发的系统编程语言,可追溯其祖宗到Algol 60,其中Algol 60是最有影响和最早的编程语言之一。
Ritchie很快就加入了UNIX项目,并使用B语言编程。

1970年,Bell实验室为UNIX项目获取了一台PDP-11。当B语言能在PDP-11上启动并运行时,Thompson就使用B语言重写了部分UNIX。

截止1971年,由于B语言非常不适合PDP-11,所以Ritchie就开发了B语言的拓展版本。
最初,Ritchie将他的新语言叫做NB。后来,随着NB跟B语言的差别越来越大,Ritchie就将名字由NB改成C语言。

到1973年,C语言已经足够稳定,可使用C语言来重写UNIX系统。

从汇编语言切换到C语言提供了一种非常重要的特征:可移植性。通过为Bell实验室的其他计算机编写C语言的编译器,UNIX团队可使UNIX能在那些安装了C语言编译器的机器上运行。

C语言标准:C89、C99

在整个20世纪70年代里,C语言继续演变,尤其是在1977年到1979年。正好在这一时期,有关C语言的第一本书出现了。由Brian Kernighan和Dennis Ritchie所写的《C Programming Language》在1978年出版,很快就成为C程序员的圣经。由于缺少有关C的官方标准,所以这本书就暂时充当所谓的标准。

在整个20世纪70年代,有相对较少的C程序员,且这些C程序员又是UNIX的用户。截止20世纪80年代,C语言已经拓展到了UNIX的狭窄边界之外。C编译器在许多运行着不同操作系统的机器上都可用。尤为特殊的是,C语言开始在快速增长的IBM PC平台上确立自己。

伴随着C语言的流行,同时也出现了很多问题。编写新的C编译器的程序员拿K&R当做参考书。不幸的是,由于K&R对一些语言特征讲的很模糊,导致编译器对待这些特征的方式也不同。还有,K&R没能清楚地区分哪些特征是属于C语言的,哪些特征是属于UNIX的。更糟糕的是,在K&R出版后,C语言继续变化,添加了一些新的特征,移除了部分老旧的特征。此时,显然需要一份全面的、精确的、持续更新的C语言描述规范。如果没有这样的一个标准,将会出现有关C语言的各种方言版本,会极大地破坏C程序的可移植性,其中可移植性是C程序的主要的优势之一。

在美国国家标准委员会ANSI的主持下,从1983年起,有关C语言的美国标准开始开发。
在许多版本后,在1988年,标准开发完成。
在1989年12月,作为ANSI标准X3.159-1989正式发布。
在1990年,该标准被国际标准组织ISO接受,作为国际标准ISO/IEC 9899:1990
因此,这一版本的C语言标准常被引用为C89或者C90,用于区分C语言的初始版本K&R。附录C中总结了C89和K&R之间的不同。
在1995年,C语言经历了一些改动。
在1999年,C语言发生了更多的意义重大的改动,作为新的标准ISO/IEC 9899:1999。用这个标准描述的C语言被称为C99。

由于C99还不是通用的,且还需要维护使用旧版本C语言编写的上百万行代码,所以本书将会使用一些标记来说明这个特征是C99里添加的。没有识别C99的特征的编译器跟C99不是兼容的。如果历史可以作为参考的话,在所有的C编译器都编程C99兼容型之前还要花费一段时间。在附录B中列举了C99和C89之间的区别。

基于C的语言:C++、Java、C#

C语言对当今的编程语言有着深远的影响,其中许多语言都从C语言中借鉴了很多。在许多基于C的语言里,有一些是非常流行:

考虑到较新的编程语言的流行,很自然的提出一个问题:是否还值得花费功夫来学习C语言?
第一,学习C语言可让你更深刻地理解C++、Java、C#等语言的一些特征。许多学习C++、Java、C#等语言的程序员经常不能掌握从C语言继承过来的一些基本特征。
第二,存在许多老旧的C语言程序,可能需要你去阅读和维护。
第三,C语言仍被用于开发新的软件,尤其是内存有限情形或者处理器性能有限情形或者需要C语言简单性的情形等。

如果你还没有使用过C++、Java、C#等语言之一,则你将会发现本书会为学习这些语言打下坚实基础。本书强调数据抽象信息隐藏等在面向对象编程里扮演重要角色的原理。

由于C++包含了C的所有特征,所以如果您后来接触C++的话,您就可以用上所有从本书学到的知识。此外,C语言的许多特征也能在其他基于C的编程语言中发现。

1.2 C语言的优点和缺点

跟其他编程语言一样,C语言有优点,也有缺点。
C语言的优点和缺点都源自C语言的最初的使用(编写操作系统和其他软件)及其基本哲学:

C语言的优点

C语言的优点对解释为什么C语言如此流行有帮助:

C语言的缺点

有效使用C语言

有效地使用C语言要求利用C语言的优点,同时尽可能地避免C语言的缺点。这里给出一些建议:

上一篇 下一篇

猜你喜欢

热点阅读