Existe alguma maneira de saber se estou compilando sob uma versão específica do Microsoft Visual Studio?
fonte
Existe alguma maneira de saber se estou compilando sob uma versão específica do Microsoft Visual Studio?
_MSC_VER
e possivelmente _MSC_FULL_VER
é o que você precisa. Você também pode examinar o visualc.hpp em qualquer instalação de impulso recente para obter alguns exemplos de uso.
Alguns valores para as versões mais recentes do compilador são:
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)
O número da versão acima, obviamente, refere-se à versão principal do Visual Studio que você vê na caixa sobre, e não ao ano no nome. Uma lista completa pode ser encontrada aqui . A partir de recentemente , o Visual Studio começará a atualizar seus intervalos monotonicamente, o que significa que você deve verificar os intervalos, em vez dos valores exatos do compilador.
cl.exe /?
dará uma dica da versão usada, por exemplo:
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>
. O inttypes.h não pode ser encontrado. Muito estranho_MSC_VER
. Espero que isso ajudeSim _MSC_VER é a macro que fornece a versão do compilador. O último número de versões do Visual C ++ tem o formato
<compiler-major-version>.00.<build-number>
, onde 00 é o número menor. Então_MSC_VER
, avaliará para<major-version><minor-version>
.Você pode usar código como este:
Parece que as atualizações entre versões sucessivas do compilador não modificaram o
compiler-minor-version
, portanto, o código a seguir não é necessário:O acesso a informações mais detalhadas sobre versão (como o número de compilação do compilador) pode ser encontrado usando outras variáveis internas do pré-processador aqui .
fonte
_MSC_VER_ == 1500
, no entanto, se a MS modificar o_MSC_VER
com atualizações do compilador, service packs, etc. (acho que nunca), a== 1500
verificação poderá ser interrompida. É por isso que codifiquei dessa maneira._MSC_VER deve ser definido para um número de versão específico. Você pode #ifdef nele ou pode usar a definição real e fazer um teste de tempo de execução. (Se, por algum motivo, você quiser executar um código diferente com base em qual compilador foi compilado? Sim, provavelmente você estava procurando o #ifdef. :))
fonte
Usando a
_MSC_VER
macro.fonte
Como resposta mais geral, http://sourceforge.net/p/predef/wiki/Home/ mantém uma lista de macros para detectar compiladores, sistemas operacionais, arquiteturas, padrões e muito mais.
fonte
Isso é um pouco antigo, mas você deve começar:
fonte
_MSC_VER
não requer que você incluastdio.h
, que pode ser facilmente testadoecho int i = _MSC_VER; > tmp.c
cl /nologo /c tmp.c
No visual studio, vá para ajudar | sobre e veja a versão do Visual Studio que você está usando para compilar seu aplicativo.
fonte