GNU99和C99(Clang)有什么区别?
我看到了编译器选项GNU99和C99。 他们有什么不同? 任何详细的文件? (Clang,Xcode,Mac OS X)
各种标准模式之间的差异
clang支持-std选项,它改变了clang使用的语言模式。 C支持的模式是c89,gnu89,c94,c99,gnu99和这些模式的各种别名。 如果没有指定-std选项,则clang默认为gnu99模式。
所有c *和gnu *模式之间的差异:
- c *模式定义
__STRICT_ANSI__
。- 特定于目标的定义不以下划线作为前缀,如“linux”,在gnu *模式中定义。
- 三字格默认在gnu *模式下closures; 它们可以通过
-trigraphs
选项启用。- parsing器在gnu *模式下识别“asm”和“typeof”作为关键字; 变体
__asm__
和__typeof__
在所有模式下都被识别。- 某些平台上的gnu *模式默认识别苹果“块”扩展; 它可以在任何模式下使用
-fblocks
选项启用。
更多链接
- 控制海湾合作委员会C语言的选项
- C语言家族的扩展
- 俚语语言扩展
- C的有用GCC标志
C99是直的C99,GNU99是C99与GNU扩展。 请参阅GCC手册页 。
正如我们都知道的那样,C99只是1999年C标准的版本。 在海湾合作委员会并没有完全支持。
GNU99是C99的扩展,就像GNU98是C98的扩展一样。 从文档:
ISO C99加上GNU扩展。 当ISO C99在GCC中完全实现时,这将成为默认设置。 名称gnu9x已弃用。
Clang也支持这些扩展。