c++ c gcc icc predefined-macro

c++ - Detectar ICC vs GCC en tiempo de compilación



predefined-macro (5)

Creo que podrías verificar __INTEL_COMPILER acuerdo con this .

¿Cómo detectar en tiempo de compilación si estoy usando gcc o icc?

(Me sorprendió bastante descubrir que icc define __GNUC__ - e incluso __GNUC_MINOR__ y __GNUC_PATCHLEVEL__ ! ¿Por qué?)


La razón por la que ICC define __GNUC__ etc. es debido a un código como el suyo que está inspeccionando macros específicas del compilador y espera verlas ...


Puede hacer que el procesador genere las macros definidas en la salida del preprocesador y busque la macro que más le convenga. Puede generar la salida del preprocesador de esta manera:

icc -dM -E -o foo.P foo.c

Luego mira foo.P (ya que es un archivo de texto). En mi caso, encontré que icc definió una macro __ICC con la versión del compilador. Sin embargo, no definió ningún __INTEL_COMPILER .


Tradicionalmente, los compiladores han definido un símbolo propio y de su versión como símbolos de preprocesador para que el código pueda adaptarse (generalmente para solucionar errores o especificidades).

CLang ha introducido un mecanismo que no había visto hasta ahora, bajo la forma de la consulta __has_feature . No reemplaza las prácticas de "solución de errores" (por lo que CLang aún expone símbolos específicos), pero permite un estilo más natural para consultar las capacidades del compilador. No sé si otros compiladores planean definir tal instalación.


Usamos

#ifdef __INTEL_COMPILER

para dividir icc , asumiendo gcc como predeterminado.