2010-04-16 147 views
1

我感兴趣地阅读了这篇文章“C99如何被普遍支持?”。其中的一条评论指出,微软不支持C99。但评论符号//与VS 2008一起工作,这个符号在C99中。我有两个问题:MS VS 2008和C99

  1. VS 2008支持C99到什么程度?

  2. 在相同的代码中混合使用C89和C99语法可以吗?所以如果我在C89中编写我的代码,然后发表评论//。这意味着我有混合编码。那么编译器在这种情况下做了什么?首先用c89检查我的代码,然后用C99接受我使用//进行评论?

回答

2

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

你会被编译你的C文件作为C++获得“好”的C99支持 - 以这种方式,你会得到可与被限定在for环路for的陈述和变量声明穿插声明,对例。

微软似乎没有兴趣向MSVC添加C99支持 - 即使它们将C99中的东西添加到C++编译器模式(如在VS2010中添加了stdint.h),因为C++中有一些额外的C99事件正在添加到C++中, + 0X。

+0

谢谢。我通常使用扩展名c而不是cpp来保存文件,因为我在C中工作。扩展名对编译器有影响吗?奇怪的是,没有提到MSVC有一个C编译器;它只是提到了C++编译器。 – yCalleecharan 2010-04-16 21:07:22

+1

扩展名默认情况下有所不同 - .c文件以C模式编译,.cpp和.cxx文件以C++模式编译。您可以使用'/ TP'或'/ Tp '来强制编译为C++和'/ TC'或'/ Tc '强制编译为C:http://msdn.microsoft.com/en-我们/图书馆/ 032xwy55.aspx – 2010-04-16 21:11:13

+0

这是有趣的知道。谢谢。 – yCalleecharan 2010-04-16 21:12:06