C语言的标准(K&RC 、C89、C99、C11)发展历程 |
添加日期: 2019-07-26 22:26:14 |
C语言最初由 Dennis Ritchie 于 1969 年到 1973 年在 AT&T 贝尔实验室里开发出来,主要用于重新实现 Unix 操作系统。此时,C语言又被称为 K&R C。其中,K 表示 Kernighan 的首字母,而 R 则是 Ritchie 的首字母。 K&R C语言与后来标准化的C语言有很大差异,比如: · 如果函数返回类型为 int,则 int 可省: int my_function(){ } 也可以写成 my_function(){ } 编译器不会有任何警告,更不会报错。 · 还有现在看来比较奇葩的函数定义,像我们现在定义这么一个函数: void my_function(int a, char*p) {} 如果是用 K&R C 语法定义的话要写成: void my_function(a,p)int a; char*p; {} K&R 的C语法中,定义一个函数时,其形参列表先列出形参的标识符,然后在函数声明的后面紧跟着对形参标识符的完整声明,最后是函数体。这在现行标准中已经被逐步废弃使用了。 1978年,丹尼斯•里奇(Dennis Ritchie)和布莱恩•柯林汉(Brian Kernighan)合作出版了《C程序设计语言》的第一版。书中介绍的C语言标准也被C语言程式设计师称作“K&R C”,第二版的书中也包含了一些ANSI C的标准。K&R C主要介绍了以下特色: 结构(struct)类型 长整数(long int)类型 无符号整数(unsigned int)类型 把运算符=+和=-改为+=和-=。因为=+和=-会使得编译器不知道使用者要处理i = -10还是i =- 10,使得处理上产生混淆。 即使在后来ANSI C标准被提出的许多年后,K&R C仍然是许多编译器的最低标准要求,许多老旧的编译仍然运行K&R C的标准。 ANSI C和ISO C C 的第一个标准是由ANSI发布的。虽然这份文档后来被国际标准化组织(ISO)采纳并且ISO发布的修订版也被ANSI采纳了,但名称ANSI C(而不是 ISO C)仍被广泛使用。ANSI C现在被几乎所有广泛使用的编译器支持。现在多数C代码是在ANSI C基础上写的。 C89和C90 1983年,美国国家标准协会组成了一个委员会,X3J11,为了创立 C 的一套标准。经过漫长而艰苦的过程,该标准于1989年完成,并在作为ANSI X3.159-1989 “Programming Language C”正式生效。这个版本的语言经常被称作”ANSI C”,或有时称为”C89”(为了区别C99)。 在1990年,ANSI C标准(带有一些小改动)被美国国家标准协会采纳为ISO/IEC 9899:1990。这个版本有时候称为C90或者ISO C。因此,C89和C90通常指同一种语言。 传统C语言到ANSI/ISO标准C语言的改进包括: 增加了真正的标准库 新的预处理命令与特性 函数原型允许在函数申明中指定参数类型 一些新的关键字,包括 const、volatile 与 signed 宽字符、宽字符串与字节多字符 对约定规则、声明和类型检查的许多小改动与澄清 C99 2000年3月,ANSI 采纳了 ISO/IEC 9899:1999 标准。这个标准通常指C99。 C99新增了一些特性,如: 支持不定长的数组,即数组长度可以在运行时决定。 变量声明不必放在语句块的开头,for 语句提倡写成 for(int i=0;i<100;++i) 的形式,即i 只在 for 语句块内部有效。 初始化结构的时候允许对特定的元素赋值。 允许编译器化简非常数的表达式。 取消了函数返回类型默认为 int 的规定。 但是各个公司对C99的支持所表现出来的兴趣不同。当GCC和其它一些商业编译器支持C99的大部分特性的时候,微软和Borland却似乎对此不感兴趣,他们把更多的精力放在了C++上。 C11 2007 年,C语言标准委员会又重新开始修订C语言,到了 2011 年正式发布了 ISO/IEC 9899: 2011,简称为 C11 标准。 C11标准新引入的特征尽管没 C99 相对 C90 引入的那么多,但是这些也都十分有用,比如:字节对齐说明符、泛型机制(generic selection)、对多线程的支持、静态断言、原子操作以及对 Unicode 的支持。 C语言标准委员会的说明,其中有人提出想为C语言添加面向对象的特性,包括增加类、继承、多态等已被 C++ 语言所广泛使用的语法特性,但是最终被委员会驳回了。因为这些复杂的语法特性并不符合C语言的设计理念以及设计哲学,况且 C++ 已经有了这些特性,C语言无需再对它们进行支持。 |
返 回 |