当前位置:  开发笔记 > 编程语言 > 正文

如何检测我是否使用特定的Visual Studio版本编译代码?

如何解决《如何检测我是否使用特定的VisualStudio版本编译代码?》经验,为你挑选了4个好方法。

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



1> jilles de wi..:

_MSC_VER而且可能_MSC_FULL_VER就是你所需要的.您还可以在任何最近的boost安装中检查visualc.hpp以获取一些用法示例.

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

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框中看到的Visual Studio的主要版本,而不是名称中的年份.一个彻底的名单,可以发现在这里.从最近开始,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
.....


抱歉,为什么微软不能轻易找到这些信息呢?这篇文章非常有用,但不应该被要求.
看起来这个宏不反映项目使用的编译器版本.即如果您在没有升级项目的情况下在较新版本中打开VS2010项目,则此宏不会反映正在使用的编译器 - 仅限IDE版本.
@chrisw我们现在在https://docs.microsoft.com/zh-cn/cpp/preprocessor/predefined-macros?view=vs-2017上对此文档进行了说明,请参阅`_MSC_VER`。希望这可以帮助

2> 小智..:

是的_MSC_VER是一个可以让你获得编译器版本的宏.Visual C++的最新版本的形式是.00.,其中00是次要编号.所以_MSC_VER会评估.

你可以使用这样的代码:

#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

可以使用其他内置预处理器变量来访问更详细的版本控制信息(例如编译器内部版本号).



3> DJ Capelis..:

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



4> Jeff Hubbard..:

通过使用_MSC_VER宏.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有