主要讲解C语言从开始到目前的版本发展,以及新版本c语言标准对应支持的gcc
版本。
C语言版本发展表格
主版本 | C89 | AMD1 | C99 | C11 |
---|---|---|---|---|
别名 | C90 ANSIC X3.159-1989 ISO/IEC 9899:1990 |
C94 C95 |
ISO/IEC 9899:1999 | ISO/IEC 9899:2011 |
标准通过时间 | 1989 | |||
标准发布时间 | 1990 | 1995 | 1999 | 2011 |
GCC使用参数 | -ansi -std=c90 -std=iso9899:1990 |
-std=iso9899:199409 | -std=c99 -std=iso9899:199 |
-std=c11 -std=iso9899:2011 |
GCC版本 | GCC4.7.x | |||
GCC使用此版本且带扩展时用参数 | -std=gnu90 | -std=gnu99 | -std=gnu11 | |
C语言实现时所对应的库 | <float.h> <limits.h> <stdarg.h> <stddef.h> |
<iso646.h> | <stdbool.h> <stdint.h> |
<stdalign.h> <stdnoreturn.h> |
最新版本的C标准是C18,由于没有引入新的语言特性只进行了修改与补充,暂不做记录。其中修改的如下内容:
1 | __STDC_VERSION__的值被改为201710L. |
注意:使用C11特性时建议采用4.7.x及以上,4.6.x虽然也支持但是属于experimental。如果非要使用采用
-std=c1x
进行
C语言发展历史
以下内容为转载内容,如出现错误希望指点。
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(J11 是委员会编号,全称是 X3J11),负责起草关于 C 语言的标准草案。1989 年,草案被 ANSI 正式通过成为美国国家标准,被称为 C89 标准
C90 (ISO C)
随后, 《The C Programming Language》第二版开始出版发行,书中内容根据 ANSI C(C89)进行了更新。1990 年,在 ISO/IEC JTC1/SC22/WG14 (ISO/IEC 联合技术第 I 委员会第 22 分委员会第 14 工作组) 的努力下,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 。这基本上是目前关于 C 语言的最新、最权威的定义了。
现在,各种 C 编译器都提供了 C89(C90) 的完整支持,对 C99 还只提供了部分支持,还有一部分提供了对某些 K&R C 风格的支持。