GNU99和C99(Clang)有什么区别?

Eon*_*nil 54 c compiler-construction clang option

我看到了编译器选项GNU99和C99.它们的区别是什么?任何细节文件?(Clang,Xcode,Mac OS X)

Mat*_*ner 43

各种标准模式之间的差异

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选项在任何模式下启用它.

更多链接


Pau*_*l R 18

C99是直接C99,GNU99是带有gnu扩展名的C99.请参阅GCC联机帮助页.


小智 11

从1999年开始,C99就是C标准的版本,我们都知道.在GCC,它没有得到完全支持.

GNU99是C99的扩展,就像GNU98是C98的扩展一样.来自文档:

ISO C99加上GNU扩展.当ISO C99在GCC中完全实现时,这将成为默认值.名称gnu9x已弃用.

Clang也支持这些扩展.

  • 我发现了一些东西 这是你想提到的吗?http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions (2认同)
  • 这份清单非常过时; 列表中的许多内容都是**不是扩展**,而是12年前标准C语言的一部分. (2认同)
  • 它仍然使列表对回答OP的问题毫无用处. (2认同)