关于 K&R C、ANSI C、C89、C99 和 C11 的历史总结

K&R C

1978年,Dennis Ritchie 和 Brian Kernighan 合作推出了《The C Programming Language》的第一版(按照惯例,经典著作一定有简称,该著作简称为 K&R),书末的参考指南(Reference Manual)一节给出了当时 C 语言的完整定义,成为那时 C 语言事实上的标准,人们称之为 K&R C。从这一年以后,C 语言被移植到了各种机型上,并受到了广泛的支持,使 C 语言在当时的软件开发中几乎一统天下。

C89(ANSI C)

随着 C 语言在多个领域的推广、应用,一些新的特性不断被各种编译器实现并添加进来。于是,建立一个新的「无歧义、与具体平台无关的 C 语言定义」成为越来越重要的事情。1983 年,ASC X3(ANSI 属下专门负责信息技术标准化的机构,现已改名为 INCITS)成立了一个专门的技术委员会 J11(委员会编号,全称是 X3J11),负责起草关于 C 语言的标准草案。1989 年,草案被 ANSI 正式通过成为美国国家标准,被称为 C89 标准。

C90(ISO C)

随后,TCPL(The C Programming Language)的第二版开始出版发行,书中内容根据 ANSI C(C89)进行了更新。1990 年,在委员会的努力下,ISO 批准了 ANSI C 成为国际标准。于是 ISO C(又称为 C90)诞生了。除了标准文档在印刷编排上的某些细节不同外,ISO C(C90)和 ANSI C(C89)在技术上完全一样

C95

之后,ISO 在 1994、1996 年分别出版了 C90 的技术勘误文档,更正了一些印刷错误,并在 1995 年通过了一份 C90 的技术补充,对 C90 进行了微小的扩充,经过扩充后的 ISO C 被称为 C95。

C99

1999 年,ANSI 和 ISO 又通过了最新版本的 C 语言标准和技术勘误文档,该标准被称为 C99 。之后还有 2011年的 C11 等版本,了解一下就好了。

现在,各种 C 编译器都提供了 C89(C90)的完整支持,对 C99 还只提供了部分支持,还有一部分提供了对某些 K&R C 风格的支持。

C 语言的各种版本