c语⾔对c99标准声明,C语⾔三⼤标准C89,C99和C11
C89 标准
1983 年美国国家标准局(American National Standards Institute,简称 ANSI)成⽴了⼀个委员会,专门来制定C语⾔标准。1989 年C 语⾔标准被批准,被称为 ANSI X3.159-1989 “Programming Language C”。这个版本的C语⾔标准通常被称为 ANSI C。⼜由于这个版本是 89 年完成制定的,因此也被称为 C89。
C99 标准
在 ANSI C 标准确⽴之后,C语⾔的规范在很长⼀段时间内都没有⼤的变动。1995 年C程序设计语⾔⼯作组对C语⾔进⾏了⼀些修改,增加了新的关键字,编写了新的库,取消了原有的限制,并于 1999 年形成新的标准——ISO/IEC 9899:1999 标准,通常被成为 C99。
C99对C89的改变
1、增加restrict指针
2、inline(内联)关键字
3、新增数据类型 _Bool
4、对数组的增强,可变长数组,数组声明中的类型修饰符等
5、单⾏注释
6、分散代码与声明
7、预处理程序的修改
a、变元列表
b、_Pragma运算符
c、内部编译指令
d、新增的内部宏
8、for语句内的变量声明
9、复合赋值
10、柔性数组结构成员
11、指定的初始化符
12、printf()和scanf()函数系列的增强
13、C99新增的库
14、__func__预定义标识符
15、其它特性的改动
放宽的转换限制
c语言struct头文件不再⽀持隐含式的int规则
删除了隐含式函数声明
对返回值的约束
扩展的整数类型
对整数类型提升规则的改进
C11 标准
C11 标准由国际标准化组织(ISO)和国际电⼯委员会(IEC) 旗下的C语⾔标准委员会于 2011 年底正式发布,⽀持此标准的主流C语⾔编译器有 GCC、LLVM/Clang、Intel C++ Compile 等。
C11相⽐C99的变化
对齐处理操作符 alignof,函数 aligned_alloc(),以及 头⽂件 。
_Noreturn 函数标记,类似于 gcc 的 attribute((noreturn))。
_Generic 关键词,有点⼉类似于 gcc 的 typeof。
静态断⾔( static assertions),_Static_assert(),在解释 #if 和 #error 之后被处理。
删除了 gets() 函数,C99中已经将此函数被标记为过时,推荐新的替代函数 gets_s()。
新的 fopen() 模式,(“…x”)。类似 POSIX 中的 O_CREAT|O_EXCL,在⽂件锁中⽐较常⽤。
匿名结构体/联合体。
多线程⽀持,包括:_Thread_local,头⽂件 ,⾥⾯包含线程的创建和管理函数(⽐如 thrd_create(),thrd_exit()),mutex (⽐如
mtx_lock(),mtx_unlock())等等。
_Atomic类型修饰符和 头⽂件 。
带边界检查(Bounds-checking)的函数接⼝,定义了新的安全的函数,例如 fopen_s(),strcat_s() 等等。
改进的 Unicode ⽀持,新的头⽂件 等。
新增 quick_exit() 函数,作为第三种终⽌程序的⽅式,当 exit() 失败时可以做最少的清理⼯作(deinitializition)。
创建复数的宏, CMPLX()。
更多浮点数处理的宏 。
struct timespec 成为 time.h 的⼀部分,以及宏 TIME_UTC,函数 timespec_get()。
参考资料:
C89(C90)、C99、C11——C语⾔的三套标准
C89标准和C99标准C11标准的区别
C语⾔的三套标准:C89、C99和C11
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论