C语言的标准化

1971年,Dennis Ritchie在B语言的基础上创立了C语言。C语言自诞生之后,不断被发展完善,同时吸引了越来越多的编程爱好者加入到C语言的阵营。它的流行迫切需要对其进行标准化。

1978年,Dennis Ritchie与Brian Kernighan合作写了第一本有关C语言的书《The C Programming Language》。此书一出便成为C程序员的宝典,被当作事实上的标准。这本书中定义的C语言称作K&R C。K&R C引入了以下几个主要的语言特性:

  • 标准I/O库
  • long int 数据类型
  • unsigned int 数据类型
  • 组合操作符=op的形式改为op=

在相当长的一段时期内,K&R C作为事实上的C语言标准,为程序员们编写新的C语言编译器提供参考。然而,K&R C并没有对一些语言特性进行精确描述,而且将C语言的特性和属于Unix的内容混杂在一起。另外,在这期间C语言还在不断变化。因此,迫切需要一种正式的标准来对C语言进行全面、准确而及时的描述。

1983年,美国国家标准协会(ANSI)临危受命,组织了X3J11委员会开始编制C语言标准。经过多次修订,1988年该委员会最终完成了C语言标准。该标准于1989年12月正式通过ANSI的认证,成为ANSI标准簇中的一员,被命名为X3.159-1989。该标准描述的C语言也被称作ANSI C。次年,该标准经过格式上的调整,被国际标准化组织(ISO)采纳成为ISO/IEC 9899-1990国际标准。因此ANSI C有时又被称为ANSI/ISO C, C89和C90,或者被直接称作标准C。C89对K&R C的修改主要有以下几点:

  • 增加了函数原型,对函数的输入参数进行严格类型检查
  • 增加了关键字void, const, volatile, signed, enum, 删除了关键字entry
  • 传递结构,允许结构本身作为参数传递给函数
  • 增加了预处理命令#elif, #error, #line, #pragma
  • 定义固有宏:__LINE__, __FILE__, __DATE__, __TIME__, __STDC__
  • 增加了真正的标准库

90年代后期,C语言进一步发展。ISO在1999年发布了ISO/IEC 9899-1999国际标准。2000年,这一标准也被ANSI采纳。该标准描述的C语言也被称作C99。与之前标准相比,C99增加了很多新的特性,例如:

  • 支持不定长的数组,允许数组的长度在运行时决定
  • 变量声明不必放在语句块的开头
  • 初始化结构时允许对特定元素赋值
  • 取消函数返回类型默认为int的规定
  • 增加了inline关键字,支持内联函数
  • 支持以//开始的单行注释
  • 支持新的数据类型long long int和 complex
  • 扩充了标准库

2007年,对C语言的新一轮修改提上日程。2011年12月ISO正式发布了C语言的新的国际标准规范ISO/IEC 9899:2011.符合这个标准的C语言也被称为C11或更正式的C1X. 与C99相比,C11包括了对C99语言及库规范的一些修订,例如:

  • 多线程支持
  • 增强的Unicode支持
  • 删除在之前版本中已不推荐使用的gets函数,提供了新的更安全的函数gets_s
  • 匿名结构体和联合

尽管C11是C语言的最新标准,但并不是所有编译器对C语言最新标准都完全支持。拿目前最常用的两个编译器GCC和Microsoft Visual C++来说,GCC完全支持C89/90, C99和C11,而Microsoft Visual C++完全支持C89/90, 部分支持C99(C99中与C++兼容的部分),而对C11并没有提供支持。

C语言\编译器GCCMicrosoft Visual C++
C89完全支持完全支持
C99完全支持部分支持
C11完全支持不支持

因此,为了保持编写的程序在编译器间的可移植性,尽量使用C89/90,在使用C99及以上语言特性时,考虑其他目标编译器的支持方案。

参考文献

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值