C'è un modo per sapere se sto compilando con una versione specifica di Microsoft Visual Studio?
_MSC_VER
e possibilmente _MSC_FULL_VER
è ciò di cui hai bisogno. Puoi anche esaminare visualc.hpp in qualsiasi recente installazione boost per alcuni esempi di utilizzo.
Alcuni valori per le versioni più recenti del compilatore sono:
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)
Il numero di versione sopra, ovviamente, si riferisce alla versione principale di Visual Studio che vedi nella casella about, non all'anno nel nome. È possibile trovare un elenco completo qui . A partire da poco , Visual Studio inizierà ad aggiornare i suoi intervalli in modo monotonico, il che significa che è necessario controllare gli intervalli, anziché i valori esatti del compilatore.
cl.exe /?
fornirà un suggerimento sulla versione utilizzata, ad es .:
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
.....
Sì _MSC_VER è la macro che ti darà la versione del compilatore. L'ultimo numero di versioni di Visual C++ è stato nel formato <compiler-major-version>.00.<build-number>
, dove 00 è il numero minore. Quindi _MSC_VER
valuterà in <major-version><minor-version>
.
Puoi usare il codice in questo modo:
#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
Appare aggiornamenti tra le versioni successive del compilatore, non hanno modificato il compiler-minor-version
, quindi il seguente codice non è richiesto:
#if (_MSC_VER >= 1500 && _MSC_VER <= 1600)
// ... Do VC9/Visual Studio 2008 specific stuff
#endif
L'accesso a informazioni più dettagliate sulla versione (come il numero di build del compilatore) può essere trovato utilizzando altre variabili pre-processore integrate qui .
_MSC_VER deve essere definito con un numero di versione specifico. Puoi #ifdef su di esso, oppure puoi usare la definizione effettiva ed eseguire un test di runtime. (Se per qualche motivo volessi eseguire codice diverso in base al compilatore con cui è stato compilato? Sì, probabilmente stavi cercando #ifdef. :))
Utilizzando la macro _MSC_VER
.
Come risposta più generale http://sourceforge.net/p/predef/wiki/Home/ mantiene un elenco di macro per il rilevamento di compilatori, sistemi operativi, architetture, standard e altro ancora.
Questo è un po 'vecchio ma dovresti iniziare:
//******************************************************************************
// 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