ansi c标准_微课堂C的三套标准:C89、C99、C11

C语言最初由 Dennis Ritchie 于 1969 年到 1973 年在 AT&T 贝尔实验室里开发出来,主要用于重新实现 Unix 操作系统。此时,C语言又被称为 K&R C。其中,K 表示 Kernighan 的首字母,而 R 则是 Ritchie 的首字母。

b67f17a07854fad38d9d5537fe47a2ac.png

差异

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

  • 如果函数返回类型为 int,则 int 可省:

    int my_function(){ }

    也可以写成

    my_function(){ }

    编译器不会有任何警告,更不会报错。

  • 还有现在看来比较奇葩的函数定义,像我们现在定义这么一个函数:

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

    如果是用 K&R C 语法定义的话要写成:

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

    K&R 的C语法中,定义一个函数时,其形参列表先列出形参的标识符,然后在函数声明的后面紧跟着对形参标识符的完整声明,最后是函数体。这在现行标准中已经被逐步废弃使用了。

另外,当时的第一本C语言专业书《The C Programming Language》也并非一个正式的编程语言规范,但被用了许多年。

C90 标准

由于C语言被各大公司所使用(包括当时处于鼎盛时期的 IBM PC),因此到了 1989 年,C语言由美国国家标准协会(ANSI)进行了标准化,此时C语言又被称为 ANSI C。

而仅过一年,ANSI C 就被国际标准化组织 ISO 给采纳了。此时,C语言在 ISO 中有了一个官方名称——ISO/IEC 9899: 1990。其中:

  • 9899 是C语言在 ISO 标准中的代号,像 C++ 在 ISO 标准中的代号是 14882;

  • 而冒号后面的 1990 表示当前修订好的版本是在 1990 年发布的。

对 于ISO/IEC 9899: 1990 的俗称或简称,有些地方称为 C89,有些地方称为 C90,或者 C89/90。不管怎么称呼,它们都指代这个最初的C语言国际标准。

这个版本的C语言标准作为 K&R C 的一个超集(即 K&R C 是此标准C的一个子集),把后来引入的许多非官方特性也一起整合了进去。其中包括:

  • 从 C++ 借鉴的函数原型(Function Prototypes)

  • 指向 void 的指针

  • 对国际字符集以及本地语言环境的支持

在此标准中,尽管已经将函数定义的方式改为现在我们常用的那种方式,不过K&R的语法形式仍然兼容。

C99标准

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

C99 标准引入了许多特性,包括:

  • 内联函数(inline functions)

  • 可变长度的数组

  • 灵活的数组成员(用于结构体)

  • 复合字面量

  • 指定成员的初始化器

  • 对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标准新引入的特征尽管没 C99 相对 C90 引入的那么多,但是这些也都十分有用,比如:

  • 字节对齐说明符

  • 泛型机制(generic selection)

  • 对多线程的支持

  • 静态断言

  • 原子操作

  • 对 Unicode 的支持

C标准汇总

518a55c0fc141798591af0c89bca5af9.png

——THE END—— 1e647476c1b4611b01f41f1d837a4c9b.png 本文整理自网络资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值