¿Hay alguna manera de saber si estoy compilando bajo una versión específica de Microsoft Visual Studio?
fuente
¿Hay alguna manera de saber si estoy compilando bajo una versión específica de Microsoft Visual Studio?
_MSC_VER
y posiblemente _MSC_FULL_VER
es lo que necesitas. También puede examinar visualc.hpp en cualquier instalación de impulso reciente para ver algunos ejemplos de uso.
Algunos valores para las versiones más recientes del compilador son:
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)
El número de versión anterior, por supuesto, se refiere a la versión principal de su Visual Studio que ve en el cuadro acerca de, no al año en el nombre. Una lista completa se puede encontrar aquí . A partir de hace poco , Visual Studio comenzará a actualizar sus rangos monotónicamente, lo que significa que debe verificar los rangos, en lugar de los valores exactos del compilador.
cl.exe /?
dará una pista de la versión utilizada, por ejemplo:
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>
. Sin embargo, inttypes.h no se puede encontrar. Muy extraño_MSC_VER
. Espero que esto ayudeSí _MSC_VER es la macro que te dará la versión del compilador. El último número de lanzamientos de Visual C ++ ha sido de la forma
<compiler-major-version>.00.<build-number>
, donde 00 es el número menor. Entonces_MSC_VER
lo evaluaré<major-version><minor-version>
.Puedes usar un código como este:
Parece que las actualizaciones entre lanzamientos sucesivos del compilador, no han modificado el
compiler-minor-version
, por lo que no se requiere el siguiente código:El acceso a información de versiones más detallada (como el número de compilación del compilador) se puede encontrar usando otras variables de preprocesador incorporadas aquí .
fuente
_MSC_VER_ == 1500
, sin embargo, si MS modificó las_MSC_VER
actualizaciones del compilador, los paquetes de servicio, etc. (no creo que lo hayan hecho), entonces la== 1500
verificación podría romperse. Es por eso que lo he codificado de esa manera._MSC_VER debe definirse con un número de versión específico. Puede #ifdef en él, o puede usar la definición real y hacer una prueba de tiempo de ejecución. (Si por alguna razón quisieras ejecutar un código diferente según el compilador con el que se compiló? Sí, probablemente estabas buscando el #ifdef. :))
fuente
Mediante el uso de la
_MSC_VER
macro.fuente
Como respuesta más general, http://sourceforge.net/p/predef/wiki/Home/ mantiene una lista de macros para detectar compiladores específicos, sistemas operativos, arquitecturas, estándares y más.
fuente
Esto es un poco viejo pero debería comenzar:
fuente
_MSC_VER
no requiere que lo incluyasstdio.h
, lo que se puede probar fácilmenteecho int i = _MSC_VER; > tmp.c
cl /nologo /c tmp.c
En Visual Studio, ve a ayudar | sobre y mira la versión de Visual Studio que estás usando para compilar tu aplicación.
fuente