¿Hay algo (macro) que esté definido solo para el compilador GCC?

A menudo hay macros reveladoras que identificarán al compilador. GCC definirá __GNUC__ para identificarse. El cl de Microsoft tiene _MSC_VER.

Desafortunadamente, la detección de esto es un poco menos que ideal. La cuestión es que cuando un compilador se convierte en un estándar de facto (por ejemplo, GCC para unices y cl para Windows), otras compilaciones tenderán a proporcionar compatibilidad y redefinir las macros. Como ejemplo, el sonido de claxon cuando se dirige a un entorno Linux proporcionará las mismas macros que GCC (__GNUC__) ya que aceptará la mayor parte de la sintaxis de extensión que GCC ha agregado (¡aunque también puede generar una advertencia para usarlas!). Cuando se invoca clang para un entorno de Windows, donde está en modo de compatibilidad con cl, definirá _MSC_VER. Al mismo tiempo, también proporcionará __clang__, por lo que es posible detectar el sonido metálico.

El resultado de esto es que necesitará un conjunto bastante complejo de macros para detectar correctamente el compilador, y es posible que un compilador pueda escabullirse a través de ellos.

Sí, GCC define algunas macros #ifdef que se pueden usar si desea escribir código específico del compilador. Aquí hay algunos:

Macros predefinidas comunes: el preprocesador C

__GNUC__ para C
__GNUG__ para C ++. __GNUG__ es equivalente a (__GNUC__ && __cplusplus)