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

关于C语言标准的一些总结

2016-07-11 15:10 344 查看
C语言的标准有哪些?

从C语言问世至今,我们通常认为的C语言标准是指:K&RC、C89、C99、C11

1.K&RC

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的标准。

2.C89
C语言真正意义上的第一个标准是由ANSI发布的。虽然这份文档后来被国际标准化组织(ISO)采纳并且ISO发布的修订版也被ANSI采纳了,但名称ANSI C(而不是 ISO C)仍被广泛使用。ANSI C现在被几乎所有广泛使用的编译器支持。现在多数C代码是在ANSI C基础上写的。

  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 宽字符、宽字符串与字节多字符

•对约定规则、声明和类型检查的许多小改动与澄清

3.C99

C99是在C89/90的基础上发展起来的,增加了基本数据类型、关键字和一些系统函数等。

C99有一部分是对于增加了宽字符集,还加入了一些库函数,是继C89标准之后的第二个C语言官方标准。第一个C++语言官方标准C++98标准,就是基于C89编写的,因此C99标准新增的语法特性在C++的编译器中就或多或少地支持了,而完全或几乎完全支持C99标准的主流编译器有:GCC、Clang 、Intel C++ Compiler 等。另外,Visual Studio2013也部分支持了C99语法特征 。

C99新增了一些特性,如:

•支持不定长的数组,即数组长度可以在运行时决定。

•变量声明不必放在语句块的开头,for 语句提倡写成 for(int i=0;i<100;++i) 的形式,即i 只在 for 语句块内部有效。

•初始化结构的时候允许对特定的元素赋值。

•允许编译器化简非常数的表达式。

•取消了函数返回类型默认为 int 的规定。

4.C11

C11标准是C语言标准的第三版,前一个标准版本是C99标准。2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)
旗下的C语言标准委员会(ISO/IEC JTC1/SC22/WG14)正式发布了C11标准 。

GCC编译器对C标准的支持

GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器。原名为GNU C语言编译器(GNU C Compiler),因为它原本只能处理C语言。GCC很快地扩展,变得可处理C++。之后也变得可处理Fortran、Pascal、Objective-C、Java、Ada,以及Go与其他语言。

如下表,GCC至今(version 4.7)已支持4种C标准。注意有些标准是不完全支持的。



另外,GCC也提供了扩展的C标准(GNU C)。



默认情况下,即在不加以上讲到的编译器选项的情况下,GCC使用-std=gnu89(版本高的话,可能是-std=gnu90)。


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