我看到了编译器选项GNU99和C99。它们的区别是什么?任何细节文件? (Clang,Xcode,Mac OS X)
答案 0 :(得分:42)
clang支持-std选项,该选项可更改clang使用的语言模式。 C的支持模式是c89,gnu89,c94,c99,gnu99以及这些模式的各种别名。如果未指定-std选项,则clang默认为gnu99模式。
所有c *和gnu *模式之间的差异:
- c *模式定义
__STRICT_ANSI__
。- 目标特定的定义不以下划线为前缀,如“linux”,在gnu *模式中定义。
- Trigraphs默认在gnu *模式下关闭;它们可以通过
-trigraphs
选项启用。- 解析器将“asm”和“typeof”识别为gnu *模式中的关键字;变体
__asm__
和__typeof__
在所有模式中都被识别。- 在某些平台上,gnu *模式默认识别Apple“blocks”扩展名;可以使用
-fblocks
选项在任何模式下启用它。
答案 1 :(得分:18)
C99是直接C99,GNU99是带有gnu扩展名的C99。请参阅GCC manpage。
答案 2 :(得分:10)
C99就是我们都知道的1999年C标准的版本。在GCC,它没有得到完全支持。
GNU99是C99的扩展,就像GNU98是C98的扩展一样。来自文档:
ISO C99加上GNU扩展。当ISO C99在GCC中完全实现时,这将成为默认值。不推荐使用名称gnu9x。
Clang也支持这些扩展。