MS VS 2008和C99

我感兴趣地读了一篇文章“支持C99的普遍性如何?”。 其中一条评论指出微软不支持C99。 但注释符号//适用于VS 2008,此符号位于C99中。 我有两个问题:

  1. VS 2008在多大程度上支持C99?

  2. 在同一代码中将C89和C99语法混合在一起是否可以? 因此,如果我在C89中编写代码然后发表评论//。 这意味着我有混合编码。 那么在这种情况下编译器会做什么呢? 首先用c89检查我的代码,然后用C99检查我是否使用//进行评论?

MSVC在C模式下支持非常少的C99。 它所做的一些事情(比如’//’注释)实际上是他们添加到C90模式的扩展,这些扩展来自C ++,也可能恰好出现在C99中。 在编译C代码时,MSVC将’//’注释视为C90的扩展,而不是将C90代码与C99代码混合。

通过将C文件编译为C ++,您将获得“更好”的C99支持 – 这样,您就可以获得声明,这些声明可以散布在for for循环范围的for语句中的语句和变量声明中。

微软似乎没有兴趣为MSVC添加C99支持 – 即使他们将C99中的东西添加到C ++编译器模式(比如在VS2010中添加了stdint.h ),因为在C ++ 0x中将一些额外的C99内容添加到C ++中。