【问题标题】:Why are there few compilers that comply with C99?为什么符合C99的编译器很少?
【发布时间】:2013-07-31 04:59:56
【问题描述】:

自 C99 发布以来已经十多年了。然而,到目前为止,几乎没有编译器支持 C99 的所有新特性。为什么?

顺便说一句:真的有完全符合 C99 的编译器吗?

【问题讨论】:

  • IME,大部分主流 C 编译器都支持大部分 C99。只是微软拒绝支持它。
  • 很难找到完全支持。 C11 可能有更好的运气,它弃用了一些有争议的 C99 特性,从强制变为可选。尽管您不得不想知道语言标准中可选功能的意义是什么,但当可移植性很重要时,您仍然没有什么可以指望的。

标签: c compiler-construction c99


【解决方案1】:

根据Wikipedia: C99 Implementations,大多数流行的编译器(Visual Studio 除外)支持大多数但不是所有的 C99 功能(如 gcc 或 clang),但是,是的,一些编译器已经完全符合 C99。

我认为原因之一是某些 C99 功能对某些编译器供应商没有用处。另一方面,最新的标准 C11 允许实现不支持该标准的某些部分——包括 C99 中强制支持的一些部分,如复杂类型和可变长度数组。 (参见 C11 §6.10.8.3 条件特征宏

【讨论】:

  • 这当然不是“难以实施”的问题。一些编译器供应商(尤其是微软)出于政治原因根本不想要它。
  • @JensGustedt 我修改了我的话,在谈论 aoubt C99 时,我默认忽略了 Micorsoft。顺便说一句,Micosoft 似乎终于决定在 Visual Studio 2013 中添加一些 C99 功能。blogs.msdn.com/b/vcblog/archive/2013/06/28/…
【解决方案2】:

顺便说一句:真的有完全符合 C99 的编译器吗?

clang 和 gcc 两大公域编译器尽在掌握。 C 库中可能还存在一些小问题,但 C 库通常与编译器不同。

clang 将 C99 作为其默认值,并且正在相对快速地向 C11 移动。

带有-std=c99 标志的 gcc 符合任何实际用途。

【讨论】:

  • 英特尔不也支持 C99 吗?
  • HP 和 IBM 都声称完全支持,iirc。
猜你喜欢
  • 2014-04-12
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 2011-01-17
相关资源
最近更新 更多