1.1 C语言的发明及发展
20世纪60年代,贝尔实验室、麻省理工学院和美国通用电器公司联合开发了一个安装在大型主机上的操作系统。它由于具有分时、多用途和多用户的特点,因此被称为多任务信息与计算系统(multiplexed information and computing system,MULTICS)。
然而,MULTICS项目的进展缓慢,最终在1969年被取消。与项目有关的贝尔实验室成员肯·汤普森(Ken Thompson,见图1.1)和丹尼斯·里奇(Dennis Ritchie,见图1.2)并未放弃,他们继续在贝尔实验室工作,并希望开发出一个新的操作系统。受MULTICS的启发,他们重新实现了许多MULTICS的功能,并最终成功地推出了第一个版本的操作系统。
第一个版本的操作系统由于仅支持两个用户,因此被戏称为不完善的MULTICS系统(uniplexed information and computing system,UNICS)。但是,在操作系统的第二次重大升级后,它终于可以支持多人同时使用。布莱恩·克尼汉(Brian Kernighan)提议将其名称从UNICS变为UNIX,这就是著名的UNIX操作系统的诞生故事。UNIX的发展如图1.3所示。
图1.1 Ken Thompson
图1.2 Dennis Ritchie
图1.3 UNIX的发展
1.C语言的诞生
1973年,Ken Thompson和Dennis Ritchie试图将UNIX操作系统移植到不同的硬件平台上。然而,他们逐渐发现,使用汇编语言编写的操作系统在移植过程中非常困难。因此,他们决定在对UNIX操作系统进行第三版升级时使用高级语言进行编写,以彻底改变现状。
20世纪70年代,当时的主流编程语言是汇编语言,几乎所有人都使用汇编语言开发程序,所以可以想象,Ken Thompson和Dennis Ritchie的想法在他人眼中是多么疯狂。
首先,Ken Thompson和Dennis Ritchie尝试使用Fortran语言(世界上第一个被正式推广使用的高级语言),但结果令人失望。随后,他们使用了BCPL(basic combined programming language)语言,并重新整合了BCPL,产生了B语言。
然而,经过一段时间的探究,Dennis Ritchie认为B语言仍然不能满足要求,因此他对B语言进行了改进,成功研发了高级编程语言:C语言。
Ken Thompson和Dennis Ritchie成功地利用C语言重写了UNIX操作系统的第三版内核。从此,UNIX操作系统不管是修改还是移植都变得相当方便,为UNIX的普及奠定了坚实的基础。
C语言的诞生与UNIX操作系统的发展密切相关,UNIX操作系统的繁荣也离不开C语言的支持。UNIX和C语言就像一块磁铁,牢牢地吸引着彼此,组成了一个完美的统一体。
2.K&R:第一个非正式标准
1979年,Dennis Ritchie和Brian Kernighan合作出版了一本关于C语言的权威著作:The C Programming Language(《C语言程序设计》)。这本书首次以书籍的形式,全面系统地阐述了C语言的各个特性和程序设计的基本方法,包括基本概念、数据类型和表达式、控制流程、函数和程序结构、指针和数组、结构体、输入和输出、UNIX系统接口以及标准库等内容。
该版本的C语言通常被称为K&R C,这是对其作者Brian Kernighan和Dennis Ritchie的简称。
3.C89:正式标准
1982年,美国国家标准委员会(ANSI)认识到,对C语言进行标准化对于扩大C语言在商业编程领域的使用是有益的,因此成立了一个委员会来制定C语言标准。
这个委员会制定了C语言标准,并于1989年被批准为《美国国家标准X3.159—1989》,也称为ANSI C。当ANSI完成了这项标准后,国际标准化组织(ISO)对它进行了很少的编辑修改,并将其转化为国际标准ISO/IEC 9899:1990。
1989年,美国国家标准委员会也接受了ISO/IEC标准,因此这个版本通常被称为C89。C89之后,还有C95(1995年)、C99(1999年)和C11(2011年)等修订版本,如图1.4所示。
图1.4 C语言标准修订时间轴