代码之家  ›  专栏  ›  技术社区  ›  Vhaerun

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

  •  246
  • Vhaerun  · 技术社区  · 16 年前

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

    7 回复  |  直到 6 年前
        1
  •  496
  •   community wiki 20 revs, 15 users 30% jilles de wit    6 年前

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

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

    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的主要版本,而不是名称中的年份。可以找到一个完整的列表 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
    .....
    
        2
  •  41
  •   Nzbuu    9 年前

    是的,msc-ver是一个宏,可以让你得到编译器版本。VisualC++的最后一批发布版本已经出现了。 <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 .

        3
  •  11
  •   DJ Capelis    16 年前

    _ MSC版本应定义为特定的版本号。您可以对其使用ifdef,也可以使用实际的define并执行运行时测试。(如果出于某种原因,您希望基于编译时使用的编译器运行不同的代码?是的,可能你在找ifdef。:)

        4
  •  6
  •   Jeff Hubbard    16 年前

    通过使用 _MSC_VER 宏。

        5
  •  3
  •   Clifford    11 年前

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

        6
  •  1
  •   Steve Fallows    14 年前

    这有点旧,但应该让你开始:

    //******************************************************************************
    // 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
    
        7
  •  -14
  •   Haacked    16 年前

    在Visual Studio中,转到“帮助”部分,查看用于编译应用程序的Visual Studio版本。