¿Qué macro predefinida puedo usar para detectar clang?


111

Estoy tratando de detectar el compilador utilizado para compilar mi código fuente. Puedo encontrar fácilmente macros predefinidas para buscar MSVC o GCC (ver http://predef.sourceforge.net/ por ejemplo), pero no puedo encontrar ninguna macro para verificar si hay clang.

¿Alguien sabe si clang define una macro como __CLANG__para saber qué está compilando actualmente mi código?



Respuestas:


120

Para obtener una lista de todas las macros predefinidas que usa el compilador, use esto:

clang -dM -E -x c /dev/null

Puedes hacer lo mismo con gcc.


79

Encontré la respuesta usando strings+ grep:

$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__

41

Esta pregunta ha sido respondida durante años, pero permítame agregar (para referencia futura) cómo se hace en Windows :

echo | clang -dM -E -

lo mismo que para GCC:

echo | gcc -dM -E -

Tenga en cuenta: ¡El último guión -es realmente importante! (De lo contrario, obtienes error: no input filespara ambos compiladores)


8
Para su información, el equivalente de Windows /dev/nullesNUL:
legalizar el

@legalize ¡Whoa! ¡Yo no lo sabía! Eso es muy bonito; donde encontraste eso?
MD XF

4
Ha estado ahí desde los días de DOS, pero la mayoría de los usuarios de DOS / Windows nunca lo necesitaron.
legalizar el

Esto es lo que suelo hacer también en Linux. Escribir /dev/nulles más trabajo.
Peter Cordes
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.