C89 C99 C11差异

目录

C89 C99 C11差异

C89

C89改进

C99

C99改进

C11

C11改进


C89 C99 C11差异

C89

1978年,Brian Kernighan和Dennis Ritchie共同撰写了《The C Programming Language》的第1版,该著作简称为“K&R”。书中对C语言的语法进行了规范化描述,书末的参考指南则给出了当时C语言的完整定义,这也成为当时C语言事实上的标准,此标准称为“K&R C”

但是随着C语言在多个领域的推广和应用,一些新的特性不断被各种编译器实现并添加进来。于是建立一个新的“无歧义,与具体平台无关的C语言定义”就成为越来越重要的事情。

1983年,美国国家标准委员会ANSI开始起草关于C语言的标准草案。1989年,ANSI正式通过C语言标准草案,至此该标准成为美国国家标准,此标准也称为C89标准。

C89改进

  1. 增加了新特性——原型。原型是函数声明的扩展,它使得编译器很容易根据函数的定义检查函数的用法。

  2. 增加了一些新的关键字,如enum、const、volatile、signed与void。如下表

autodoubleintstructbreakelselongswitch
caseenumregistertypedefcharexternreturnunion
constfloatshortunsignedcontinueforsignedvoid
defaultgotosizeofvolatiledoifstaticwhile
  1. 除此之外,C89还做了许多其他的改进,如增强了预处理指令,定义了相关的宏,允许将结构本身作为参数传递给函数,从“无符号保留”转到“值保留”等。

PS:1990年,ISO批转ANSI C成为国际标准,于是ISO C(又称为C90)诞生。和C89相比,技术上是完全一样的

C99

1999年,ANSI和ISO又通过了最新版本的C语言标准和技术勘误文档,该标准被称为C99。这里需要说明的是,与C89不同,并非市面上所有的编译器都支持C99,并且有的编译器只支持C99的部分新特性。

C99改进

相对于C89,C99主要做了以下几方面的改进:

  1. 增加了restrict与inline关键字

  2. 新增Bool、Complex与_Imaginary 3种数据类型,如C99中定义的复数类型为:float_Complex、float_Imaginary、double_Complex、double_Imaginary、long double_Complex与long double_Imaginary

  3. 增强数组的功能,支持可变长数组等

  4. 支持复合赋值

  5. 增强预处理程序,如引入_Pragma运算符,并增加了一些内部宏等

  6. 支持柔性数组结构成员,即允许结构中的最后一个元素是未知大小的数组

C11

由于技术的发展日新月异,因此虽然C99还没有得到完全支持,但在2007年,标准委员会就又开始起草新的C语言标准来取代现有的C99标准,该标准命名为C1X,C1X是一个非正式名字。2011年12月,ANSI正式采纳了ISO/IEC 9899:2011标准,即C11标准。

C11改进

相对于C99,C11主要做了以下几方面的改进:

  1. 采用新的对齐规范,包括Alignas说明符、Alignof运算符、aligned_alloc函数与<stdalign.h>头文件

  2. 增加_Noreturn函数标记

  3. 增加_Generic关键词

  4. 增加静态断言_Static_assert()

  5. 删除gets()函数,C99中已经将此函数标记为过时,推荐新的替代函数gets_s()

  6. 采用新的fopen()模式

  7. 增加匿名结构体/联合体

  8. 支持多线程技术,包括_Thread_local与头文件<threads.h>

  9. 增加_Atomic类型修饰符和头文件<stdatomic.h>

  10. 带边界检查(bounds-checking)的函数接口,定义了新的安全的函数,例如fopen_s()、strcat_s()等

  11. 改进Unicode支持与头文件<uchar.h>

  12. 增加quick_exit()函数作为第三种终止程序的方式

  13. 可以创建复数的宏

  14. 增加更多处理浮点数的宏

  15. struct timespec成为time.h的一部分,以及宏TIME_UTC和函数timespec_get()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值