购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 C语言的发展简史

C语言,从诞生之初就在程序员中备受青睐。目前,C语言编译器普遍存在于各种不同的操作系统中,例如UNIX、Microsoft Windows及Linux等。C语言的设计影响了许多后来的编程语言,如C++、Java、C#等。

1.2.1 C语言的起源

20世纪,人们一直在为贝尔实验室的发明欢呼,那里是7项诺贝尔奖的诞生地。Ken Thompson和Dennis M.Ritchie(见图1-1)从大学毕业后就进入到贝尔实验室工作直到退休,传奇的C语言和UNIX操作系统也由此诞生。

图1-1  Ken Thompson和Dennis M.Ritchie

1964年,Thompson参与了贝尔实验室、麻省理工学院以及通用电气公司联合开发的一套多用户的分时操作系统,名叫Multics。在开发Multics期间,Thompson创造了名为Bon的程序设计语言(简称B语言)。Thompson身为优秀的设计师,同时又是一名游戏爱好者,他设计了一款电子游戏——Space Travel,该游戏可运行于Multics操作系统之上。1969年,贝尔实验室撤出了Multics计划。Thompson决定独自在一台被丢弃的PDP-7上写一个挤干了泡沫的Multics操作系统,并在此操作系统下重写了他的Space Travel游戏。这一操作系统被同事戏称为Uniplexed Information and Computing System(UNICS),后来改称为UNIX。

UNIX的出现开始并不为大家所看好,但是却引起了贝尔实验室另一位同事的注意,这就是Dennis M.Ritchie,Dennis主动加入进来共同完善这个系统。至此一场轰轰烈烈的UNIX的传奇时代才真正拉开了序幕。1972年,他们联手将UNIX移植到当时最先进的大型机PDP-2上,由于UNIX非常简洁、稳定与高效,以至于当时大家都放弃了PDP-2上自带的DEC操作系统而完全改用UNIX,这时的UNIX已经开始走向成熟。随着UNIX的需求量日益增加,Ken与Dennis决定将UNIX进一步改写,以便可以移植到各种不同的硬件系统。由于UNIX的源代码中不少是用汇编语言完成的,不具备良好的移植性。1973年,Dennis在B语言的基础上开发出了C语言,并用C语言重写了UNIX,C语言灵活、高效,与硬件无关,并且不失其简洁性,正是UNIX移植所需要的法宝,于是UNIX与C语言完美结合在一起,产生了新的可移植的UNIX操作系统。随着UNIX的广泛使用,C语言也成为当时最受欢迎的编程语言并延续至今。

说到UNIX与C语言,还有一段小故事。当时安装了UNIX的PDP-11被放在贝尔实验室供大家使用,有一天大家发现Ken总是可以得到最高的权限轻松进入他们的账户,在贝尔实验室这种高人云集的地方,这简直让人太不能容忍了,于是有若干高手,仔细分析UNIX代码,找到后门,修改后再重新编译整个UNIX。当所有人都以为这个世界应该从此清静的时候,却发现Ken还是很容易就取得了他们的账户权限,为此大家郁闷不已。直到很多年后,Ken才道出其中的原委,原来代码里确实存在后门,不过并不在UNIX代码中,而是藏在编译UNIX的C编译器里,每次C编译器编译UNIX代码时就会自动加入后门代码,而当时整个贝尔实验室用的都是Ken所写的C编译器。Ken和Dennis被尊称为黑客的鼻祖,他们代表了真正的黑客精神:做事情以兴趣为出发点;极富钻研精神、喜欢迎接挑战;乐于分享、不计回报。

1983年,因为UNIX和C语言的巨大成功,Ken和Dennis共同获得当年度计算机界最高奖——图灵奖。

1.2.2 C语言的发展

1978年,Brian Kernighan和Ritchie合著的The C Programming Language出版,成为C程序员必读的“圣经”,是各种C语言版本的基础。

随着C语言的不断发展扩充,1983年,美国国家标准化协会开始制定新的C语言标准,1989年完成,称为C89标准;到了1995年,C语言又发生了一些变化,1999年推出新标准,称为C99标准。2011年,ISO正式发布了C语言的新标准C11,新的标准提高了对C++的兼容性,并增加了一些新的特性。

无从考证究竟有多少软件是用C语言编写的,但我们赖以生存的很多重量级软件中确实大多数都是用C语言编写的。可以这么说,几乎没有不能用C语言实现的软件,没有不支持C语言的系统。在世界编程语言排行榜中(www.tiobe.com),C语言总是排在数一数二的位置。图1-2(a)和图1-2(b)分别是2014年3月和4月,TIOBE的编程语言排行情况。

图1-2  TIOBE编程语言排行

C语言对现代编程语言有着巨大的影响,许多现代编程语言都借鉴了大量C的特性。在众多基于C的语言中,以下几种非常具有代表性。

·C++:包括了所有C的特性,增加了类和其他特性以支持面向对象编程;

·Java:基于C++,所以也继承了C的许多特性;

·C#:是综合C++和Java而发展起来的一种较新的语言;

·Perl:是一种强大的脚本语言,在发展过程中采用了C的许多特性;

·PHP:是一种HTML内嵌式脚本语言,其语法混合了C、Java和Perl。

1.2.3 C语言的特点

C语言既有高级语言的特点,又有汇编语言的特点。发明C语言是为了编写以往由汇编语言编写的应用程序,因此能够在有限的内存空间里快速运行就显得至关重要。

C语言拥有一个庞大的数据类型和运算符集合,这个集合使得C语言具有强大的表达能力,寥寥几行代码往往就可以实现许多功能。

C语言是一种包容性语言,不像其他语言那样为减少程序员犯错,提供太多范式来约束程序员。C语言假设用户知道自己在做什么,这种信任给程序员带来了自由,他们拥有最大的发挥空间,可以自由地编写代码。这些精心设计的代码运行效率高,可以极大地节约资源。可是从另一方面讲,这使得C程序更容易隐藏错误,C的灵活性导致编程出错概率高,在用其他语言编程时可以发现的错误,C编译器却不加限制。

优缺点经常是同源的,C语言更是如此,其优缺点主要来自于C语言与硬件的紧密结合及其赋予程序员的自由空间。C语言中那些容易导致初学者出错的特性,往往也正是编程高手为之吸引的特性。

C语言是编写操作系统的最好选择。因为它能直接与计算机底层打交道,精巧、灵活、高效。也正因为它的这种特性,在对运行效率要求较高的系统中,如设备驱动程序、高性能实时中间件、嵌入式领域、并发程序设计等,C语言也是首选。在需要继承和维护已有的C代码的地方,也需要C语言。在涉及编程能力的考试环节,通常考的都是C语言。 KvOUVofEABR6FBRa1m5yauxQW8asCvxwhAoijY9Ai0k4MMyXy0h+7Hy5chppRa5t

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开