目录

C语言 | C 语言标准

K&R C

C 语言最初由 Dennis Rithie 于 1969 年到 1973 年在 AT&T 贝尔实验室开发出来的,主要用于重新实现 Unix 操作系统。此时 C 语言叫做 K&R C(K 是 Kernighan 的首字母,R 是 Rithie 的首字母)。

K&R C 语言和后来标准化的 C 语言有很大的差异,比如

  • 如果函数的返回值为 int,则 int 可省,并且编译器不会有任何警告

    1
    
    int my_function(){ }
    

    也可以写成

    1
    
    my_function(){ }
    
  • 函数定义也不一样,现在定义一个函数是这样的

    1
    
    void my_function(int a, char*p) {}
    

    如果使用 K&R C 语法定义的话得这样(在现行的标准中,这种方式已经被废弃了)

    1
    
    void my_functionapint a; char*p; {}
    

ANSI C

C 语言被各大公司所使用,因此到1989 年,美国国家标准协会(ANSI)对此进行了标准化

C89/90

一年之后 ANSI C 被国际标准化组织 ISO 采纳。此时,C 语言在 ISO 中有一个官方名称— ISO/IEC 9899:1990。对于 ISO/IEC 9899:1990 俗称或简称,有些地方称为 C89,有些地方称为 C90,或者 C89/90。

这个版本的 C 语言标准作为 K&R C 的一个超集(即 K&R C 是标准 C 的一个子集),把后来引入的许多非官方特性也一起整合了进去,比如:借鉴了 C++ 的函数原型、执行 void 的指针、对国际字符集以及本地语言环境的支持、函数定义的方式也改成现在常用的那张方式了(K$R 的语法形式仍然兼容)。

ISO/IEC 9899:1990 中的 9899 是 C 语言在 ISO 标准中的代号,像 C++ 在 ISO 标准中的代号是 14882;冒号后面的 1990 表示当前修订的好的版本是在 1990 年发布的。

C99

随后的几年,C 语言的标准化委员会又不断对 C 语言进行改进。1999年,正式发布了 ISO/IEC 9899:1999,简称 C99。

C99 标准引入了许多特性,包括:内联函数、可变长度的数组、灵活的数组成员(用于结构体)、复合字面量、指定成员的初始化器、对 IEEE754 浮点数的改进、支持不定参数个数的宏定义、在数据类型上增加了 long long int 以及复数类型。

但是,很少有 C 语言编译器是完整支持 C99 ,像主流的 GCC 以及 Clang 编译器支持高达 90% 以上,而微软的 Visual Studio 2015 中的 C 编译器只能支持 70% 左右。

C11

2007 年,C 语言标准委员会又重新修订 C 语言,到 2011 年正式发布了 ISO/IEC 9899:2011,简称 C11 标准。

C11 标准引入了:字节对齐说明符、泛型机制、对多线程的支持、静态断言、原子操作以及对 Unicode 的支持。

巨人的肩膀

C语言中文网:http://c.biancheng.net/view/143.html

维基百科:https://en.wikipedia.org/wiki/C_(programming_language)

C语言标准委员会的最新动态:http://www.open-std.org/jtc1/sc22/wg14/)