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