• 1.摘要
  • 2.基本信息
  • 3.相比C99的变化
  • 4.C11还缺少什么
  • 5.参考资料

C11

C11标准是 ISO/IEC 9899:2011 - Information technology -- Programming languages -- C 的简称1,曾用名为C1X。

C11标准是C语言标准的第三版,前一个标准版本是C99标准。2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC) 旗下的C语言标准委员会(ISO/IEC JTC1/SC22/WG14)正式发布了C11标准2

C11标准的最终定稿的草案是免费开放的,为N15703,但是正式标准文件需要198瑞士法郎2

当前,支持此标准的主流C语言编译器有:GCC、Clang、Intel C++ Compiler等。

基本信息

  • 中文名

    C11

  • 外文名

    C11

  • 曾用名

    C1X

  • 标准编号

    ISO/IEC 9899:2011

  • 发布时间

    2011年12月8日

  • 发布机构

    ISO/IEC JTC1/SC22/WG14

相比C99的变化

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

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

_Noreturn void thrd_exit(int res);

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

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,头文件 <threads.h>,里面包含线程的创建和管理函数(比如 thrd_create(),thrd_exit()),mutex (比如 mtx_lock(),mtx_unlock())等等,更多内容清参考 7.26 节。

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

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

11. 改进的Unicode支持,新的头文件 <uchar.h> 等。实例代码:

12. 新增 quick_exit() 函数,作为第三种终止程序的方式,当 exit() 失败时可以做最少的清理工作(deinitializition),具体见 7.22.4.7。

13. 创建复数的宏, CMPLX(),见 7.3.9.3。

14. 更多浮点数处理的宏 (More macros for querying the characteristics of floating point types, concerning subnormal floating point numbers and the number of decimal digits the type is able to store)。

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

C11还缺少什么