Come rilevare se sto compilando il codice con Visual Studio 2008?

C’è un modo per sapere se sto compilando sotto Microsoft Visual Studio 2008?

_MSC_VER e possibilmente _MSC_FULL_VER è ciò di cui hai bisogno. Puoi anche esaminare visualc.hpp in qualsiasi recente installazione di boost per alcuni esempi di utilizzo.

Alcuni valori per le versioni più recenti del compilatore sono:

 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 riportato si riferisce ovviamente alla versione principale del tuo studio di visualizzazione che vedi nella casella di informazioni, non all’anno nel nome. Un elenco completo può essere trovato qui . A partire da poco , Visual Studio inizierà ad aggiornare i suoi intervalli monotonicamente, il che significa che dovresti controllare gli intervalli, piuttosto che i valori esatti del compilatore.

cl.exe /? fornirà un suggerimento sulla versione utilizzata, ad esempio:

 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 ++ ha avuto la forma .00. , dove 00 è il numero minore. Quindi _MSC_VER valuterà in .

Puoi usare un codice come questo:

 #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 la versione del 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 di versione più dettagliate (come il numero di build del compilatore) può essere trovato utilizzando qui altre variabili di pre-processore incorporate.

_MSC_VER deve essere definito su un numero di versione specifico. È ansible utilizzare #ifdef su di esso oppure è ansible utilizzare la definizione effettiva e eseguire un test di runtime. (Se per qualche motivo volessi eseguire un codice diverso in base a quale compilatore è stato compilato? Sì, probabilmente stavi cercando il #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 dovrebbe 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 

In Visual Studio, vai in help | su e guarda la versione di Visual Studio che stai usando per compilare la tua app.