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.