第一章 C语言的发展历史和特点
一、 C语言的发展史
C语言的出现可以追溯到计算机发展的早期。从程序语言的发展过程可以看到,以前的操作系统等系统软件主要是用汇编语言编写的。但由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都不是很好,为了提高可读性和可移植性,人们开始寻找一种语言,这种语言应该既具有高级语言的特性,又不失低级语言的优点。于是,C语言产生了。
C语言是在由UNIX的研制者Dennis Ritchie和Ken Thompson开发UNIX系统的副产品。当时,Thompson独自完成了UNIX操作系统的原始版本,该系统运行在PDP-7计算机上。同同时代的其他操作系统一样,UNIX最初也是用汇编语言写的。由于用汇编语言编写的程序难以调试和维护,Thompson意识到应该用一种更加高级的语言来完成UNIX未来的开发,于是Thompson在BCPL语言的基础上开发出B语言。这其中的BCPL语言又可以追溯到更早的ALGOL 60语言。1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。1967年,剑桥大学的Martin Richards对CPL语言进行简化,产生了BCPL语言。
当B语言经过改进并且运行在了PDP-11计算机上时,Thompson就用B语言重新编写了UNIX的部分代码。但到了1971年,B语言已经暴露出非常不适合PDP-11的问题,于是Ritchie开始着手进行B语言的升级版开发。他最初将新开发的语言命名为NB语言,意为“New B”,但是后来,新的语言越来越脱离B语言,于是他决定将其改为C语言。到了1973年,C语言已经足够稳定,可以用来重新编写UNIX系统了。
1973年Ken Thompson和Dennis Ritchie两人合作,用C语言重写了UNIX操作系统,并在PDP—11计算机上加以实现。C语言伴随着UNIX操作系统成为一种最受欢迎的计算机程序设计语言。1977年出现了不依赖于具体机器的C语言编译版本《可移植C语言编译程序》,使C语言移植到各种不同的机器变得非常简单。
1978年,贝尔实验室的Brian W. Kernighan和Dennis Ritchie合著了“The C Programming Language”一书,对C语言的语法进行了规范化的描述,成为以后广泛使用的C语言的基础。随着微型计算机的普及,产主了各种不同的C语言版本,为了统一标准,美国国家标准化协会(ANSI)于1983年制定了C语言标准,这就是 ANSI C标准。1987年又公布了新标准——87ANSI C,1990年,C语言成为国际标准化组织(ISO)通过的标准语言。
尽管C语言是在大型商业机构和学术界的研究实验室研发的,但是当开发者们为第一台个人计算机提供C编译系统之后,C语言就得以广泛传播,并为大多数程序员所接受。对MS-DOS操作系统来说,系统软件和实用程序都是用C语言编写的。Windows操作系统大部分也是用C语言编写的。
二、C语言的特点
★ 简洁紧凑、灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写自由。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以象汇编语言一样对位、字节和地址进行操作。
★ 运算符丰富
C语言的运算符包含的范围很广泛,共有种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理,从而使C语言的运算类型极其丰富,表达式类型多样化。
★ 数据结构丰富
C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型、枚举类型等。能用来实现各种复杂的数据类型的运算。
★ C语言是面向过程语言
C语言是面向过程的语言,它以函数形式提供给用户,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
★ C语法限制不太严格、程序设计自由度大
一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误,而C语言允许程序编写者有较大的自由度。
★ C语言允许直接访问物理地址,可以直接对硬件进行操作
由于可以直接访问物理地址,因此C语言既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行操作。
★ C语言程序生成代码质量高,程序执行效率高
一般只比汇编程序生成的目标代码效率低10へ20%。
★ C语言适用范围大,可移植性好
C语言有一个突出的优点就是适合于多种操作系统, 如DOS、Windows、UNIX,Linux,也适用于多种机型。
讲完了C语言的出生史和特点后,下一章就要开始我们奇妙的C语言程序设计之旅。顺祝各位旅行愉快!
参考文献
[1] K.N.King著,吕秀峰译.C语言程序设计——现代方法[M].北京:人民邮电出版社,2007.
[2] C语言的发展历史和特点.http://jpkc.whu.edu.cn/jpkc2005/alprogram/jpkc/wlkt/course/01_1.htm