您的位置:首页 > 编程语言 > C语言/C++

C语言版本历史

2016-01-13 13:43 351 查看

一、C语言起源

    C 语言最早的原型是 ALGOL 60 1963 年,剑桥大学将其发展成为 CPL(Combined Programing Language)。 1967 年,剑桥大学的 Matin Richards 对 CPL 语言进行了简化,产生了 BCPL 语言。 1970 年,美国贝尔实验室(Bell Labs)的 Ken Thompson 将 BCPL 进行了修改,并取名叫做 B 语言,意思是提取 CPL 的精华(Boiling CPL down
to its basic good features)。并用 B 语言写了第一个 UNIX 系统。 1973 年,AT&T 贝尔实验室的 Dennis Ritchie(D.M.RITCHIE) 在 BCPL 和 B 语言的基础上设计出了一种新的语言,取 BCPL 中的第二个字母为名,这就是大名鼎鼎的 C 语言。随后不久,UNIX 的内核(Kernel) 和应用程序全部用 C 语言改写,从此,C 语言成为 UNIX 环境下使用最广泛的主流编程语言。

二、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。 

【[b]C99】[/b] 1999 年,ANSI 和 ISO 又通过了最新版本的 C 语言标准和技术勘误文档,该标准被称为 C99 。这基本上是目前关于 C 语言的最新、最权威的定义了。 

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

目前主要的C语言规范有c89(c90), c95(94)和c99。C89是最早的C语言规范,于89年提出,90年先由美国国家标准局推出ANSI版本,后来被接纳为ISO国际标准 (ISO/IEC 9899:1990),因而有时也称为c90。但在94和96年分别对c90进行了两次错误修正,gcc支持的是修正后的c89(90)版本的C语言规 范。在95年提出过对90版规范的修订案,称为 C95或者AMD1。gcc也支持c95规范。最新的一次C规范修订在99年制定(ISO/IEC
9899:1999),即常称的C99规范。在2001年对C99的错误进行了修正,gcc支持的修正后的c99规范,但是到目前为止,gcc还没有完成对c99规范的完全支持。

三、C语言的四个主要版本

1. ANSI C==C89==C90

ANSI C standard==X3.159-1989

1989年批准通过;

1990年发布;

后被批准为ISO标准:ISO/IEC 9899:1990

常叫做:C89

偶尔被叫做:C90

GCC中指定此版本所用参数时,有三种写法:

-ansi
-std=c90
-std=iso9899:1990
 

此C90后来在1994年,1996年,先后发布过对应的勘误表;

 

2. AMD1==C94==C95

1995年,针对之前1900年发布的标准,发布了一个修订版;

添加了一个有向图(digraphs)和宏:
__STDC_VERSION__


此标准,常被叫做:AMD1

有时候被叫做:C94C95

GCC中指定此版本时所用参数:

-std=iso9899:199409
 

3. C99

1999年又发布了新标准:ISO/IEC 9899:1999

常被叫做:C99

此C99标准未完成之前的草案,被叫做:C9X

GCC中指定此版本时所用参数有两种写法:

-std=c99
-std=iso9899:1999
 

此C99后来在2001年,2004年和2007年,先后发布过对应的勘误表;

 

4. C11

2011年发布了新标准:ISO/IEC 9899:2011

GCC中指定此版本时所用参数有两种写法:

-std=c11
-std=iso9899:2011
此C11标准未完成之前的草案,被叫做:C1X

 

四、关于GCC中对于C的扩展

对于GCC来说,对于上述各个版本的C语言,都有一定的扩展(extension)

如果用上面列出来的那些-std参数的话,则会禁止,不使用这些扩展的。

如果想要在GCC中使用C扩展的话,所用的参数都是gnuXX类型的,分别是:

C90使用GCC的C扩展:-std=gnu90
C99使用GCC的C扩展:-std=gnu99
C11使用GCC的C扩展:-std=gnu11
 

当前C language dialect默认所用的参数是:-std=gnu90

但是当以后,GCC对于C99和C11支持程度真正完善后,则可能会换成对应的:-std=gnu99或-std=gnu11

 

五、C语言库函数实现类型

ISO的C语言标准,定义了对于C语言的两种实现:

支持C语言的所有库函数
支持C语言的基本库函数( + 各自版本对应的实现)
基本库函数包括:
<float.h>,
<limits.h>,
<stdarg.h>,
<stddef.h>

AMD1对应的是:
<iso646.h>

[code]C99对应的是:
<stdbool.h>,<stdint.h>

[code]C11对应的是:
<stdalign.h>,<stdnoreturn.h>


 

六、总结C语言的各种版本



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C