C11语言比C99,C11相比C99的变化

C语言

C99是标准ISO/IEC 9899:1999的简称。

c99是在c89的基础上发展起来的,增加了基本数据类型,关键字和一些系统函数等。其实在初学阶段C89(ANSI C)和C99的区别是不易察觉的,所以不必太在意这个。

C99有一部分是对于大字符集的优化(很多资料上写的是ANSI标准化),还加入了一些数据库函数,是C89之后的标准,我们用的C是C89标准的,C++是C89编写的,目前的

C99标准其实在以前的编译器中就或多或少的支持了,目前完全支持的有这些:GCC、Borland C++等。

2011年12月8号,ISO 发布了新的C 语言的新标准——C11,之前被称为C1X,官方名称ISO/IEC 9899:2011。

C11相比C99的变化

1. 对齐处理操作符alignof,函数aligned_alloc(),以及头文件。见7.15 节。

2. _Noreturn 函数标记,类似于gcc 的__attribute__((noreturn))。例子:

_Noreturn void thrd_exit(int res);

3. _Generic 关键词,有点儿类似于gcc 的typeof。例子:

#define cbrt(X) _Generic((X), long double: cbrtl, \

default: cbrt, \

float: cbrtf)(X)

4. 静态断言(static assertions),_Static_assert(),在解释#if 和#error 之后被处理。例子:

_Static_assert(FOO > 0, "FOO has a wrong value");

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

gets_s()。

6. 新的fopen() 模式,(“…x”)。类似POSIX 中的O_CREAT|O_EXCL,在文件锁中比较常用。

7. 匿名结构体/联合体,这个早已经在gcc 中了,我们并不陌生,定义在6.7.2.1 p13。

8. 多线程支持,包括:_Thread_local,头文件,里面包含线程的创建和管理函数(比如thrd_create(),thrd_exit()),mutex (比如mtx_lock(),mtx_unlock())等等,更多内容清参考7.26 节。

9. _Atomic类型修饰符和头文件,见7.17 节。

10. 带边界检查(Bounds-checking)的函数接口,定义了新的安全的函数,例如fopen_s(),strcat_s() 等等。更多参考Annex K。

11. 改进的Unicode 支持,新的头文件等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值