【发布时间】:2010-09-09 08:37:54
【问题描述】:
有什么方法可以知道我是否在特定的 Microsoft Visual Studio 版本下编译?
【问题讨论】:
标签: c++ visual-studio
有什么方法可以知道我是否在特定的 Microsoft Visual Studio 版本下编译?
【问题讨论】:
标签: c++ visual-studio
_MSC_VER 和可能的_MSC_FULL_VER 是您需要的。您还可以在最近的任何 boost 安装中检查 visualc.hpp 以获取一些使用示例。
较新版本的编译器的一些值是:
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)
上面的版本号当然是指您在 about 框中看到的 Visual Studio 的主要版本,而不是名称中的年份。完整列表可以在here 找到。 Starting recently,Visual Studio 将开始单调更新其范围,这意味着您应该检查范围,而不是精确的编译器值。
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
.....
【讨论】:
#if defined _MSC_VER # if _MSC_VER >= 1800 # include <inttypes.h>。但是,找不到 inttypes.h。很奇怪
_MSC_VER 。希望这会有所帮助
是的 _MSC_VER 是一个宏,它将为您提供编译器版本。 Visual C++ 的最新版本号采用<compiler-major-version>.00.<build-number> 形式,其中00 是次要编号。所以_MSC_VER 将评估为<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,因此不需要以下代码:
#if (_MSC_VER >= 1500 && _MSC_VER <= 1600)
// ... Do VC9/Visual Studio 2008 specific stuff
#endif
可以使用其他内置预处理器变量here访问更详细的版本信息(例如编译器内部版本号)。
【讨论】:
_MSC_VER_ == 1500 检查 VC++ 9,但是如果 MS 确实使用编译器更新、服务包等修改了 _MSC_VER(我不认为他们曾经有过),那么== 1500 检查可能会中断。这就是我这样编码的原因。
_MSC_VER 应定义为特定的版本号。您可以对其使用#ifdef,也可以使用实际定义并进行运行时测试。 (如果出于某种原因您想根据编译时使用的编译器运行不同的代码?是的,可能您正在寻找#ifdef。:))
【讨论】:
通过使用_MSC_VER 宏。
【讨论】:
作为更一般的答案,http://sourceforge.net/p/predef/wiki/Home/ 维护了一个宏列表,用于检测特定的编译器、操作系统、架构、标准等。
【讨论】:
这有点旧,但应该可以帮助您入门:
//******************************************************************************
// 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
【讨论】:
_MSC_VER 不需要你包含stdio.h,可以很容易地测试echo int i = _MSC_VER; > tmp.c cl /nologo /c tmp.c
在visual studio中,去帮助|了解并查看您用于编译应用的 Visual Studio 版本。
【讨论】: