C语言最初由 Dennis Ritchie 于 1969 年到 1973 年在 AT&T 贝尔实验室里开发出来 , 主要用于重新实现 Unix 操作系统 。此时 , C语言又被称为 K&R C 。其中 , K 表示 Kernighan 的首字母 , 而 R 则是 Ritchie 的首字母 。
文章插图
差异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语法中 , 定义一个函数时 , 其形参列表先列出形参的标识符 , 然后在函数声明的后面紧跟着对形参标识符的完整声明 , 最后是函数体 。这在现行标准中已经被逐步废弃使用了 。
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 年发布的 。
这个版本的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语言的三套标准:C89、C99、C11】
推荐阅读
- 拼多多500差0.01需要多少人 拼多多满500提现是真的吗
- 聪明的女人结婚不领证 女方为什么要先办婚礼再领证
- PHP判断访客是否移动端浏览器访问的四种方法
- 图像质量与图像分辨率的关系
- 去环球影城的搞笑说说 去北京环球影城怎么发朋友圈
- 阿里云的redis规范
- PHP中常见的五种设计模式
- 芽孢茶正确泡法,最全黑茶的泡法专业泡法教给您
- 100cm的伞大不大 直径100cm的雨伞小吗
- 韩国后的卸妆膏怎么用 韩国unny卸妆水好用吗