有没有办法知道我是否在特定的Microsoft Visual Studio版本下编译?
of1yzvn41#
_MSC_VER和可能的_MSC_FULL_VER是你所需要的。你也可以在任何最近的boost安装中检查visualc.hpp以获得一些使用示例。较新版本的编译器的一些值为:
_MSC_VER
_MSC_FULL_VER
MSVC++ 14.30 _MSC_VER == 1933 (Visual Studio 2022 version 17.3.4) MSVC++ 14.30 _MSC_VER == 1932 (Visual Studio 2022 version 17.2.2) MSVC++ 14.30 _MSC_VER == 1930 (Visual Studio 2022 version 17.0.2) MSVC++ 14.30 _MSC_VER == 1930 (Visual Studio 2022 version 17.0.1) MSVC++ 14.28 _MSC_VER == 1929 (Visual Studio 2019 version 16.11.2) MSVC++ 14.28 _MSC_VER == 1928 (Visual Studio 2019 version 16.9.2) MSVC++ 14.28 _MSC_VER == 1928 (Visual Studio 2019 version 16.8.2) MSVC++ 14.28 _MSC_VER == 1928 (Visual Studio 2019 version 16.8.1) MSVC++ 14.27 _MSC_VER == 1927 (Visual Studio 2019 version 16.7) MSVC++ 14.26 _MSC_VER == 1926 (Visual Studio 2019 version 16.6.2) MSVC++ 14.25 _MSC_VER == 1925 (Visual Studio 2019 version 16.5.1) MSVC++ 14.24 _MSC_VER == 1924 (Visual Studio 2019 version 16.4) MSVC++ 14.23 _MSC_VER == 1923 (Visual Studio 2019 version 16.3) MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 version 16.2) MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 version 16.1) MSVC++ 14.2 _MSC_VER == 1920 (Visual Studio 2019 version 16.0) MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9) MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8) MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7) MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6) MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5) MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3) MSVC++ 14.1 _MSC_VER == 1910 (Visual Studio 2017 version 15.0) MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015 version 14.0) MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013 version 12.0) MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012 version 11.0) MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010 version 10.0) MSVC++ 9.0 _MSC_FULL_VER == 150030729 (Visual Studio 2008, SP1) MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008 version 9.0) MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005 version 8.0) MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1) MSVC++ 7.0 _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0) MSVC++ 6.0 _MSC_VER == 1200 (Visual Studio 6.0 version 6.0) MSVC++ 5.0 _MSC_VER == 1100 (Visual Studio 97 version 5.0)
当然,上面的版本号指的是您在“关于”框中看到的Visual Studio的主要版本,而不是名称中的年份。在这里可以找到完整的列表。Starting recently,Visual Studio将开始单调地更新其范围,这意味着您应该检查范围,而不是确切的编译器值。cl.exe /?将给予所用版本的提示,例如:
cl.exe /?
c:\program files (x86)\microsoft visual studio 11.0\vc\bin>cl /? Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x86 .....
voase2hg2#
Yep _MSC_VER是一个宏,它会告诉你编译器的版本号。Visual C++的最新版本号是<compiler-major-version>.00.<build-number>,其中00是次要版本号。所以_MSC_VER的计算结果是<major-version><minor-version>。您可以使用如下代码:
<compiler-major-version>.00.<build-number>
<major-version><minor-version>
#if (_MSC_VER == 1500) // ... Do VC9/Visual Studio 2008 specific stuff #elif (_MSC_VER == 1600) // ... Do VC10/Visual Studio 2010 specific stuff #elif (_MSC_VER == 1700) // ... Do VC11/Visual Studio 2012 specific stuff #endif
在编译器的连续版本之间进行的更新似乎没有修改compiler-minor-version,因此不需要以下代码:
compiler-minor-version
#if (_MSC_VER >= 1500 && _MSC_VER <= 1600) // ... Do VC9/Visual Studio 2008 specific stuff #endif
可以使用其他内置预处理器变量here访问更详细的版本信息(如编译器内部版本号)。
carvr3hs3#
_MSC_VER应定义为特定的版本号。您可以在其上使用#ifdef,也可以使用实际的定义并执行运行时测试。(如果出于某种原因,您希望根据编译代码的编译器来运行不同的代码?是的,可能您正在查找#ifdef.:))
ugmeyewa4#
通过使用_MSC_VER宏。
hlswsv355#
作为一个更一般的答案,http://sourceforge.net/p/predef/wiki/Home/维护了一个宏列表,用于检测特定的编译器、操作系统、体系结构、标准等等。
3zwtqj6y6#
这是一个有点老,但应该让你开始:
//****************************************************************************** // Automated platform detection //****************************************************************************** // _WIN32 is used by // Visual C++ #ifdef _WIN32 #define __NT__ #endif // Define __MAC__ platform indicator #ifdef macintosh #define __MAC__ #endif // Define __OSX__ platform indicator #ifdef __APPLE__ #define __OSX__ #endif // Define __WIN16__ platform indicator #ifdef _Windows_ #ifndef __NT__ #define __WIN16__ #endif #endif // Define Windows CE platform indicator #ifdef WIN32_PLATFORM_HPCPRO #define __WINCE__ #endif #if (_WIN32_WCE == 300) // for Pocket PC #define __POCKETPC__ #define __WINCE__ //#if (_WIN32_WCE == 211) // for Palm-size PC 2.11 (Wyvern) //#if (_WIN32_WCE == 201) // for Palm-size PC 2.01 (Gryphon) //#ifdef WIN32_PLATFORM_HPC2000 // for H/PC 2000 (Galileo) #endif
t9aqgxwy7#
在visual studio中,转到帮助|了解并查看用于编译应用的Visual Studio版本。
7条答案
按热度按时间of1yzvn41#
_MSC_VER
和可能的_MSC_FULL_VER
是你所需要的。你也可以在任何最近的boost安装中检查visualc.hpp以获得一些使用示例。较新版本的编译器的一些值为:
当然,上面的版本号指的是您在“关于”框中看到的Visual Studio的主要版本,而不是名称中的年份。在这里可以找到完整的列表。Starting recently,Visual Studio将开始单调地更新其范围,这意味着您应该检查范围,而不是确切的编译器值。
cl.exe /?
将给予所用版本的提示,例如:voase2hg2#
Yep _MSC_VER是一个宏,它会告诉你编译器的版本号。Visual C++的最新版本号是
<compiler-major-version>.00.<build-number>
,其中00是次要版本号。所以_MSC_VER
的计算结果是<major-version><minor-version>
。您可以使用如下代码:
在编译器的连续版本之间进行的更新似乎没有修改
compiler-minor-version
,因此不需要以下代码:可以使用其他内置预处理器变量here访问更详细的版本信息(如编译器内部版本号)。
carvr3hs3#
_MSC_VER应定义为特定的版本号。您可以在其上使用#ifdef,也可以使用实际的定义并执行运行时测试。(如果出于某种原因,您希望根据编译代码的编译器来运行不同的代码?是的,可能您正在查找#ifdef.:))
ugmeyewa4#
通过使用
_MSC_VER
宏。hlswsv355#
作为一个更一般的答案,http://sourceforge.net/p/predef/wiki/Home/维护了一个宏列表,用于检测特定的编译器、操作系统、体系结构、标准等等。
3zwtqj6y6#
这是一个有点老,但应该让你开始:
t9aqgxwy7#
在visual studio中,转到帮助|了解并查看用于编译应用的Visual Studio版本。