Qual macro predefinida posso usar para detectar o clang?


111

Estou tentando detectar o compilador usado para compilar meu código-fonte. Posso encontrar facilmente macros predefinidas para verificar se há MSVC ou GCC (consulte http://predef.sourceforge.net/ por exemplo), mas não consigo encontrar nenhuma macro para verificar se há clang.

Alguém sabe se o clang define uma macro como __CLANG__para saber o que está compilando meu código no momento?



Respostas:


121

Para obter uma lista de todas as macros predefinidas que o compilador usa, use o seguinte:

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

Você pode fazer o mesmo para o gcc.


79

Encontre a resposta usando strings+ grep:

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

41

Esta pergunta foi respondida há anos, mas deixe-me acrescentar (para referência futura) como isso é feito no Windows :

echo | clang -dM -E -

mesmo que para GCC:

echo | gcc -dM -E -

Observação: o último traço -é realmente importante! (Caso contrário, você obtém error: no input filespara ambos os compiladores)


8
Para sua informação, o equivalente do Windows /dev/nulléNUL:
legalize

@legalize Whoa! Eu não sabia disso! Isso é bem legal; onde você achou isso?
MD XF

4
Ele existe desde os dias do DOS, mas a maioria dos usuários do DOS / Windows nunca precisou dele.
legalizar

Isso é o que eu geralmente faço no Linux também. Digitar /dev/nulldá mais trabalho.
Peter Cordes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.