当今的编译器普遍支持C99标准吗?我知道即使是GCC也没有完全支持。这是正确的吗?
C99的哪些特性得到了更广泛的支持,即哪些特性可以让我相当确定大多数编译器都会理解我的代码?
当今的编译器普遍支持C99标准吗?我知道即使是GCC也没有完全支持。这是正确的吗?
C99的哪些特性得到了更广泛的支持,即哪些特性可以让我相当确定大多数编译器都会理解我的代码?
有人提到英特尔编译器支持C99。还有Comeau C/C++编译器完全支持C99。这是我知道的唯二支持C99的编译器。
C99中我不使用的功能,因为它们得不到很好的支持,包括:
我经常使用的C99功能,似乎得到了很好的支持(除了微软):
stdint.h
snprintf()
- MS有一个非标准的_snprintf()
,有严重的限制,不能始终在缓冲区中添加空字符并且不指示缓冲区应该有多大为了解决Microsoft的不支持,我使用来自MinGW的公共领域的stdint.h
(我修改了VC6上也能工作),以及来自Holger Weiss的几乎公共领域的snprintf()
在Microsoft上不受支持,但根据项目仍将在其他编译器上使用的项目包括:
_Pragma()
- 这使得pragma更加可用对于gcc编译器,有一个包含所有支持特性的表格。看起来最大的缺失是可变长度数组。大多数其他缺失的特性都是库问题而不是语言特性。
-std=c99
一样的选项。 - osgxClang(基于LLVM的C和C ++编译器)具有相当不错的C99支持。我认为它唯一不支持的是浮点数的指令。