2010-04-16 98 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