C 编译器支持 1989、1999 和 2011 版 C 语言:
- C89。使用 --c89 选项编译会使编译器符合 ISO/IEC 9899:1990 C 标准,该标准先前被批准为 ANSI X3.159-1989。名称“C89”和“C90”指的是同一种编程语言。本文档中使用了“C89”。
- C99。使用 --c99 选项编译会使编译器符合 ISO/IEC 9899:1999 C 标准。
- C11。使用 --c11 选项编译会使编译器符合 ISO/IEC 9899:2011 C 标准。
Kernighan 和 Ritchie 的《C 程序设计语言》(K&R) 第二版中也介绍了 C 语言。编译器还可以在 GNU C 编译器中接受许多语言扩展(请参阅Topic Link Label6.16)。
在支持 C89 的默认宽松 ANSI 模式下,编译器支持 C99 和 C11 的某些功能。它支持 C99 模式下 C99 的所有语言功能以及 C11 模式下 C11 的所有语言功能。请参阅Topic Link Label6.15。
在宽松 ANSI 模式下(默认情况下为打开)和 C11 模式下支持 C11 中的原子操作。原子操作是通过禁用运算中的中断来实现的。
ANSI/ISO 标准确定了可能受目标处理器特性、运行时环境或主机环境影响的 C 语言的某些功能。这组功能在标准编译器中会有所不同。
不受支持的 C 库功能包括:
- 运行时库对宽字符的支持很少。类型 wchar_t 实现为 unsigned int(16 位)。宽字符集相当于 char 类型的值集。该库包含头文件 <wchar.h> 和 <wctype.h>,但不包含标准中指定的所有函数。请参阅Topic Link Label6.6,了解有关扩展字符集和多字节字符集的信息。
- 运行时库包含头文件 <locale.h>,但极少实现。唯一受支持的区域设置是 C 区域设置。也就是说,指定为随区域设置而变化的库行为被硬编码为 C 区域设置的行为,并且通过调用 setlocale() 来安装不同的区域设置的尝试将返回 NULL。
- 不支持 C99/C11 规范中的某些运行时函数和功能。请参阅Topic Link Label6.15。