C99 和 C11 标准的区别

此文档列出 C99 和 C11 两个标准的主要区别。

1、新增多线程支持

引入 threads.h 头文件,包括 thrd_create() 创建线程的函数 和 mtx_t(互斥锁类型)和 cnd_t(条件变量类型)。

2、静态断言

支持 _Static_assert(编译时断言)。如:

_Static_assert(sizeof(int) == 4, "int must be 4 bytes");

3、对齐控制

  1. _Alignas,指定对齐要求。
  2. _Alignof,获取对齐值。
  3. 新增 stdalign.h 头文件,提供 alignasalignof 宏。

4、Unicode支持增强

加入 UTF-8/16/32 字符串字面值,新增头文件 uchar.h(Unicode工具)如:

char u8str[] = u8"UTF-8字符串";
char16_t u16str[] = u"UTF-16字符串";
char32_t u32str[] = U"UTF-32字符串";

5、移除和弃用

  1. 移除 gets() 函数, C11 正式从标准库移除这个不安全函数。
  2. 变长数组改为可选,从 C99 的强制要求改为可选特性。

其它略!