Gibt es eine Möglichkeit festzustellen, ob ich unter einer bestimmten Microsoft Visual Studio-Version kompiliere?
quelle
Gibt es eine Möglichkeit festzustellen, ob ich unter einer bestimmten Microsoft Visual Studio-Version kompiliere?
_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 hilftYep _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:
Es scheint, dass Aktualisierungen zwischen aufeinanderfolgenden Versionen des Compilers die nicht geändert haben
compiler-minor-version
, sodass der folgende Code nicht erforderlich ist:Der Zugriff auf detailliertere Versionsinformationen (z. B. die Compiler-Build-Nummer) kann über andere integrierte Präprozessorvariablen hier erfolgen .
quelle
_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. :))
quelle
Mit dem
_MSC_VER
Makro.quelle
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.
quelle
Dies ist ein wenig alt, sollte aber Ihnen den Einstieg erleichtern:
quelle
_MSC_VER
erfordert nicht, dass Sie einschließenstdio.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.
quelle