题
如何普遍地是C99标准支持在今天的编译器?我的理解是,甚至没有海湾合作委员会完全支持它。是这个吗?
其功能的C99支持多其他人,即这可以我用的是相当肯定的,大多数编纂者将能了解我吗?
解决方案
如果你想编写可移植的C代码,那么我建议你用C89(旧的ANSI C标准)编写。大多数编译器都支持此标准。
英特尔C编译器非常好C99支持,它可以生成快速的二进制文件。 (谢谢 0x69 !)
MSVC支持一些新功能和微软计划在未来版本中扩大支持。
GCC支持C99的一些新功能。他们创建了一个关于 C99功能状态的表格。可能C99最有用的功能是可变长度阵列,GCC现在支持它。 Clang (LLVM的C fronted)支持除浮点pragma之外的大多数功能。
Wikipedia似乎有编译器的 C99支持的精彩摘要。
其他提示
有人提到英特尔编译器有C99支持。还有 科莫C/C++编译器 这完全支持C99。这些是唯一我知道的。
C99的功能,我做不使用,因为它们不支持包括:
- 变长阵列
- 宏变量的参数。
C99特点,我经常使用,似乎是很好的支持(除了通过Microsoft):
stdint.h
snprintf()
-MS有一个非标准_snprintf()
这已严重限制,不总是空终止缓冲区并不表示有多大的缓冲区应
工作周围微软的非的支持,我用一个 公共领域 stdint.h
从MinGW (我修改为还在工作VC6)和一个 近公共领域 snprintf()
从Holger Weiss
的项目,Microsoft不支持,但仍将使用的其他汇编者根据该项目包括:
- 混合的声明和代码
- 内联的功能
_Pragma()
-这使得杂注更有用
对于gcc,有一个包含所有受支持功能的表。似乎缺少的最大的东西是可变长度数组。大多数其他缺少的功能是库问题而不是语言功能。
IBM c编译器在作为c99调用时具有c99支持,但在作为cc或xlc调用时则不支持。
查看 GNU的C99支持状态,了解当前支持哪些功能的详细信息。
Sun Studio 据称是支持整个C99规范。我从来没有用过它们,所以我无法确认。
我不相信微软编译器完全支持C99规范。他们目前更关注C ++
Clang(基于LLVM的C和C ++编译器)具有相当不错的C99支持。我认为它唯一不支持的是浮点编译指示。
Microsoft似乎在跟踪C ++标准,但不支持C99。 (他们可能会挑选一些功能,但可以说是在重叠的地方挑选C ++ 0x。)
从Visual Studio .NET 2003开始,新项目默认启用“编译C代码为C ++(/ TP)”选项。