Como detectar se estou compilando código com o Visual Studio 2008?

Existe alguma maneira de saber se estou compilando no Microsoft Visual Studio 2008?

_MSC_VER e possivelmente _MSC_FULL_VER é o que você precisa. Você também pode examinar o visualc.hpp em qualquer instalação recente do boost para alguns exemplos de uso.

Alguns valores para as versões mais recentes do compilador são:

 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) 

O número da versão acima, é claro, refere-se à versão principal do seu Visual Studio que você vê na checkbox sobre, não ao ano no nome. Uma lista completa pode ser encontrada aqui . Começando recentemente , o Visual Studio começará a atualizar seus intervalos monotonicamente, o que significa que você deve verificar intervalos, em vez de valores exatos do compilador.

cl.exe /? dará uma sugestão da versão usada, por exemplo:

 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 ..... 

Sim _MSC_VER é a macro que te dará a versão do compilador. O último número de versões do Visual C ++ tem o formato .00. , em que 00 é o número menor. Então, o _MSC_VER será avaliado como .

Você pode usar código como este:

 #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 

Parece atualizações entre lançamentos sucessivos do compilador, não modificaram o compiler-minor-version , portanto, o seguinte código não é necessário:

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

O access a informações de versão mais detalhadas (como o número de compilation do compilador) pode ser encontrado usando outras variables ​​internas de pré-processador aqui .

_MSC_VER deve ser definido para um número de versão específico. Você pode #ifdef nele, ou você pode usar o real definir e fazer um teste de tempo de execução. (Se por algum motivo você quisesse rodar código diferente baseado em qual compilador foi compilado? Sim, provavelmente você estava procurando pelo #ifdef. :))

Usando a macro _MSC_VER .

Como uma resposta mais geral, http://sourceforge.net/p/predef/wiki/Home/ mantém uma lista de macros para detectar compiladores, sistemas operacionais, arquiteturas, padrões e mais específicos.

Isso é um pouco antigo, mas deve começar:

 //****************************************************************************** // 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 

No visual studio, vá para ajudar | sobre e veja a versão do Visual Studio que você está usando para compilar seu aplicativo.