关于c ++:如何检测我是否正在使用特定的Visual Studio版本编译代码?

关于c ++:如何检测我是否正在使用特定的Visual Studio版本编译代码?

How to Detect if I'm Compiling Code with a particular Visual Studio version?

有没有办法知道我是否在特定的Microsoft Visual Studio版本下进行编译?


您需要_MSC_VER_MSC_FULL_VER。您还可以在任何最新的boost安装中检查visualc.hpp,以获得一些用法示例。

最新版本的编译器的一些值是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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的主要版本,而不是名称中的年份。完整列表可以在这里找到。从最近开始,Visual Studio将开始单调更新其范围,这意味着您应该检查范围,而不是确切的编译器值。

cl.exe /?会提示使用的版本,例如:

1
2
3
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
.....

是的_MSC_VER是将为您提供编译器版本的宏。 Visual C ++的最新发行版本的格式为.00.,其中00是次要版本号。因此,_MSC_VER将计算为

您可以使用如下代码:

1
2
3
4
5
6
7
#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,因此不需要以下代码:

1
2
3
#if (_MSC_VER >= 1500 && _MSC_VER <= 1600)
   // ... Do VC9/Visual Studio 2008 specific stuff
#endif

可以在此处使用其他内置的预处理程序变量来访问更详细的版本信息(例如,编译器内部版本号)。


_MSC_VER应该定义为特定的版本号。您可以在其上#ifdef,也可以使用实际的定义并进行运行时测试。 (如果由于某种原因您想基于使用哪个编译器运行不同的代码?是的,可能您正在寻找#ifdef。)


通过使用_MSC_VER宏。


作为更一般的答案,http://sourceforge.net/p/predef/wiki/Home/维护用于检测特定编译器,操作系统,体系结构,标准等的宏列表。


这有点旧,但应该可以帮助您入门:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//******************************************************************************
// 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


在Visual Studio中,寻求帮助|了解并查看您用于编译应用程序的Visual Studio版本。


推荐阅读