2014-01-09 103 views
2
#ifdef ??? 
    // code for VC++ 2010 compiler 
#else 
    // code for later compiler versions 
#endif 

可以使用什麼宏而不是????我不關心較舊的編譯器版本。區分VC++ 2010和更高版本的編譯器版本

+2

說實話,我沒有得到這個問題 – billz

+3

[谷歌是你的朋友(http://msdn.microsoft.com /en-us/library/b0084kay.aspx)。具體來說,看一下'_MSC_VER'類型的宏。請注意,它們使用_compiler_版本,而不是IDE版本。 – icabod

+1

@billz:例如,代碼行'TestClass(const TestClass&)= delete;'不是在VC++ 2010中編譯的,但我想在VC++ 2012和VC++ 2013編譯器中使用它。所以,當使用VC++ 2010時,我需要一些預編譯器宏來排除這一行。 –

回答

3

對於VS2010或更高版本:

#if _MSC_VER >= 1600 

由於C/C++編譯器附帶VS2010是版本16.00.x(如由cl.exe在命令行上顯示)。

http://msdn.microsoft.com/en-us/library/b0084kay%28v=vs.100%29.aspx

爲完整的某些措施:

Visual Studio _MSC_VER 
    version  value 
============= =========== 
     6    1200 

    2002    1300 
    2003    1310 
    2005    1400 

    2008    1500 
    2010    1600 
    2012    1700 

    2013    1800 
+0

我可能也會嵌套檢查,以便覆蓋「v16」(顯示警告),v16和v16以後的「問題」...中的三個選項。 – icabod

相關問題