主要讲解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 风格的支持。

参考文献

c语言各个版本的简单介绍

C18(C语言标准)

弄清楚哪个版本的gcc才支持c11