Antworten:
_MSC_VER
und möglicherweise _MSC_FULL_VER
ist das, was Sie brauchen. Sie können visualc.hpp auch in jeder kürzlich durchgeführten Boost-Installation auf einige Verwendungsbeispiele untersuchen.
Einige Werte für die neueren Versionen des Compilers sind:
MSVC++ 14.24 _MSC_VER == 1924 (Visual Studio 2019 version 16.4)
MSVC++ 14.23 _MSC_VER == 1923 (Visual Studio 2019 version 16.3)
MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 version 16.2)
MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 version 16.1)
MSVC++ 14.2 _MSC_VER == 1920 (Visual Studio 2019 version 16.0)
MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9)
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)
Die obige Versionsnummer bezieht sich natürlich auf die Hauptversion Ihres Visual Studios, die Sie in der Info-Box sehen, nicht auf das Jahr im Namen. Eine ausführliche Liste finden Sie hier . Ab kürzlich aktualisiert Visual Studio seine Bereiche monoton. Dies bedeutet, dass Sie die Bereiche überprüfen sollten und nicht die genauen Compilerwerte.
cl.exe /?
gibt einen Hinweis auf die verwendete Version, zB:
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
.....
#if defined _MSC_VER # if _MSC_VER >= 1800 # include <inttypes.h>
. inttypes.h kann jedoch nicht gefunden werden. Sehr seltsam
_MSC_VER
. Hoffe das hilft
Yep _MSC_VER ist das Makro, mit dem Sie die Compilerversion erhalten. Die letzte Anzahl von Releases von Visual C ++ hatte die Form <compiler-major-version>.00.<build-number>
, wobei 00 die untergeordnete Nummer ist. Also _MSC_VER
wird zu bewerten <major-version><minor-version>
.
Sie können folgenden Code verwenden:
#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
Es scheint, dass Aktualisierungen zwischen aufeinanderfolgenden Versionen des Compilers die nicht geändert haben compiler-minor-version
, sodass der folgende Code nicht erforderlich ist:
#if (_MSC_VER >= 1500 && _MSC_VER <= 1600)
// ... Do VC9/Visual Studio 2008 specific stuff
#endif
Der Zugriff auf detailliertere Versionsinformationen (z. B. die Compiler-Build-Nummer) kann über andere integrierte Präprozessorvariablen hier erfolgen .
_MSC_VER_ == 1500
suchen. Wenn jedoch MS das _MSC_VER
mit Compiler-Updates, Service Packs usw. geändert hat (ich glaube nicht, dass dies jemals der Fall war), könnte die Prüfung unterbrochen werden == 1500
. Deshalb habe ich es so codiert.
_MSC_VER sollte auf eine bestimmte Versionsnummer definiert sein. Sie können entweder #ifdef darauf verwenden oder die tatsächliche Definition verwenden und einen Laufzeit-Test durchführen. (Wenn Sie aus irgendeinem Grund einen anderen Code ausführen wollten, der darauf basiert, mit welchem Compiler er kompiliert wurde? Ja, wahrscheinlich haben Sie nach dem #ifdef gesucht. :))
Mit dem _MSC_VER
Makro.
Als allgemeinere Antwort führt http://sourceforge.net/p/predef/wiki/Home/ eine Liste von Makros zum Erkennen spezifischer Compiler, Betriebssysteme, Architekturen, Standards und mehr.
Dies ist ein wenig alt, sollte aber Ihnen den Einstieg erleichtern:
//******************************************************************************
// 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
_MSC_VER
erfordert nicht, dass Sie einschließen stdio.h
, was leicht getestet werden kannecho int i = _MSC_VER; > tmp.c
cl /nologo /c tmp.c
Gehen Sie im Visual Studio zu Hilfe | Informationen zu der Version von Visual Studio, mit der Sie Ihre App kompilieren.