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


当前回答

_MSC_VER应该定义为特定的版本号。您可以对它使用#ifdef,也可以使用实际的define并进行运行时测试。(如果出于某种原因,你想根据编译器的不同来运行不同的代码?是的,也许你在找#ifdef。:))

其他回答

这个有点老了,但应该能让你开始:

//******************************************************************************
// 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中,去帮助| about,看看你用来编译应用程序的visual studio版本。

是的,_MSC_VER是一个宏,它会让你得到编译器的版本。Visual c++的最新版本的形式是<compiler-major-version>.00。<build-number>,其中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

它出现在编译器的连续版本之间的更新,没有修改编译器的小版本,所以下面的代码是不需要的:

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

访问更详细的版本信息(如编译器构建号)可以使用其他内置的预处理器变量在这里找到。

_MSC_VER应该定义为特定的版本号。您可以对它使用#ifdef,也可以使用实际的define并进行运行时测试。(如果出于某种原因,你想根据编译器的不同来运行不同的代码?是的,也许你在找#ifdef。:))

通过使用_MSC_VER宏。