2010-08-28 17 views
8

Esto es tanto una pregunta como una referencia y espero que las personas puedan aprovechar esto para que pueda ser reutilizado por personas con preguntas similares.Detección de versiones del compilador durante el tiempo de compilación

¿Cómo podemos detectar con fiabilidad una versión particular de un compilador C/C++/ObjC? Ahora sé la respuesta para Visual Studio y conozco parcialmente la respuesta para Xcode.

Ahora para el compilador de Visual Studio tenemos _MSC_VER que se define con estos valores:

Version 1.0 800 
Version 2.0 900 
Version 2.x 900 
Version 4.0 1000 
Version 5.0 1100 
Version 6.0 1200 
Version 7.0 1300 
Version 7.1 1310 
Version 8.0 1400 (Visual Studio 2005) 
Version 9.0 1500 (Visual Studio 2008) 
Version 10.0 1600 (Visual Studio 2010) 
Version 11.0 1700 (Visual Studio 2012) 

ya por el compilador Xcode tenemos esta definición:

__APPLE_CC__ 

Pero los únicos valores I' he podido encontrar a través de google (los documentos de Mac no parecen tener estos valores) son:

Xcode 3.0    5465 
Xcode 3.1    5470 
Xcode 3.1 (GCC 4.2) 5553 
Xcode 3.2.3   5664 (Got this value from my own compiler) 

Can an ¿completó esta lista o proporcionó enlaces a una lista completa? Y tal vez podamos proporcionar información para otros compiladores también.

+2

Ni Visual Studio ni Xcode son compiladores: no debería preocuparse por su versión. – alternative

+3

@mathepic Soy tan pedante como el próximo chico, pero ¿en serio? VS viene con una versión específica de los compiladores frontend para cada revisión del IDE, y expone esa versión a través de _MSC_VER; eso es lo que quiere –

+1

Déjame aclararme entonces. Sí, ambos son IDE pero ambos vienen con sus propios compiladores, que es de lo que estaba hablando. Esperé que eso fuera claro a partir de mi mensaje. – Cthutu

Respuesta

1

Como alguien que ha portado más que su parte justa de 'C' alrededor, puedo ver eran viene desde, por lo que aquí tienes para que podamos empezar:

Para IBM producto CL/C++:

__xlc__ - Format is V.R.M.F eg: "9.0.0.0" 
__IBMCPP__ Format is an integer as VRM eg: V9.0 is 900 
__IBMC__ - Format is an integer as VRM, 
      which indicates the level of compiler as VRM as: 
< 200 is C Set/2 
< 300 is C Set++ 
otherwise is Visual Age C++ V.M.C 

      where V=version, M=release, M=modification and F=fix level. 

Para Borland C:

___BORLANDC__ ?? 

Para GNU C:

__GNUC__ ?? 

Para Watcon C:

__WATCOMC__ 
+0

¿Sabe por casualidad cómo obtener la misma información sobre los compiladores de C#? En VS para C#, _MSC_VER ya no está disponible. ¿Que es? –

+0

No conozco ninguna predefinición en el compilador de Microsoft C#, pero el mono compilado tiene '__MonoCS__' que ha proporcionado para ser útil ... (ohh usted sí tiene DEPURACIÓN) –

0

hay una mesa de esta información aquí:

https://sourceforge.net/p/predef/wiki/Compilers/

Lamentablemente, parece que MacOS define __clang__, __GNUCC__ y __llvm__ lo que esta información se puede obtener una poco confundido.

Pero generalmente, solo se aplica un conjunto de información.

Cuestiones relacionadas