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

时间:2011-03-15 14:52:44

标签: c compiler-construction option clang

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

3 个答案:

答案 0 :(得分:42)

Differences between various standard modes

  

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也支持这些扩展。