_MSC_VER
i być może _MSC_FULL_VER
jest to, czego potrzebujesz. Możesz także sprawdzić visualc.hpp w dowolnej niedawnej instalacji doładowania dla niektórych przykładów użycia.
Niektóre wartości dla nowszych wersji kompilatora to:
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)
Powyższy numer wersji odnosi się oczywiście do głównej wersji Twojego programu Visual Studio widocznej w polu „about”, a nie do nazwy roku. Dokładna lista znajduje się tutaj . Od niedawna Visual Studio zacznie monotonnie aktualizować swoje zakresy, co oznacza, że powinieneś sprawdzać zakresy, a nie dokładne wartości kompilatora.
cl.exe /?
poda podpowiedź do używanej wersji, np .:
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>
. Nie można jednak znaleźć inttypes.h. Bardzo dziwne_MSC_VER
. Mam nadzieję, że to pomożeTak _MSC_VER to makro, które dostanie wersję kompilatora. Ostatnia liczba wydań Visual C ++ ma formę
<compiler-major-version>.00.<build-number>
, gdzie 00 jest liczbą mniejszą. Tak_MSC_VER
oceni do<major-version><minor-version>
.Możesz użyć takiego kodu:
Wydaje się, że aktualizacje między kolejnymi wydaniami kompilatora nie zostały zmodyfikowane
compiler-minor-version
, więc następujący kod nie jest wymagany:Dostęp do bardziej szczegółowych informacji o wersji (takich jak numer kompilacji kompilatora) można znaleźć za pomocą innych wbudowanych zmiennych preprocesora tutaj .
źródło
_MSC_VER_ == 1500
, jednak jeśli MS zmodyfikuje_MSC_VER
aktualizacje kompilatora, dodatki Service Pack itp. (Nie sądzę, by kiedykolwiek miały), wtedy== 1500
sprawdzenie może się zepsuć. Właśnie dlatego tak to zakodowałem._MSC_VER należy zdefiniować dla określonego numeru wersji. Możesz na nim #ifdef lub użyć rzeczywistej definicji i wykonać test czasu wykonywania. (Jeśli z jakiegoś powodu chciałeś uruchomić inny kod w oparciu o kompilator, z którym został skompilowany? Tak, prawdopodobnie szukałeś #ifdef. :))
źródło
Za pomocą
_MSC_VER
makra.źródło
Jako bardziej ogólną odpowiedź http://sourceforge.net/p/predef/wiki/Home/ utrzymuje listę makr do wykrywania specyficznych kompilatorów, systemów operacyjnych, architektur, standardów i innych.
źródło
To jest trochę stary, ale powinien zacząć:
źródło
_MSC_VER
nie wymaga dołączaniastdio.h
, co można łatwo przetestowaćecho int i = _MSC_VER; > tmp.c
cl /nologo /c tmp.c
W studiu wizualnym przejdź do pomocy | i zobacz wersję programu Visual Studio, której używasz do kompilowania aplikacji.
źródło