Quelle macro prédéfinie puis-je utiliser pour détecter le clang?

111

J'essaye de détecter le compilateur utilisé pour compiler mon code source. Je peux facilement trouver des macros prédéfinies pour vérifier MSVC ou GCC (voir http://predef.sourceforge.net/ par exemple), mais je ne trouve aucune macro pour vérifier le clang.

Est-ce que quelqu'un sait si clang définit une macro comme __CLANG__pour savoir ce qui compile actuellement mon code?

Pierre Bourdon
la source

Réponses:

121

Pour obtenir une liste de toutes les macros prédéfinies utilisées par le compilateur, utilisez ceci:

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

Vous pouvez faire de même pour gcc.

Chris Suter
la source
79

J'ai trouvé la réponse en utilisant strings+ grep:

$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__
Pierre Bourdon
la source
41

Cette question a reçu une réponse pendant des années, mais permettez-moi d'ajouter (pour référence future) comment cela se fait sous Windows :

echo | clang -dM -E -

idem que pour GCC:

echo | gcc -dM -E -

Remarque: le dernier tiret -est en fait important! (Sinon, vous obtenez error: no input filespour les deux compilateurs)

Bernd Elkemann
la source
8
FYI, équivalent Windows de /dev/nullisNUL:
légaliser
@legalize Whoa! Je ne savais pas ça! C'est plutôt cool; où avez-vous trouvé ça?
MD XF
4
Il existe depuis l'époque du DOS, la plupart des utilisateurs de DOS / Windows n'en ont jamais eu besoin.
légaliser
C'est aussi ce que je fais habituellement sous Linux. La frappe /dev/nullest plus de travail.
Peter Cordes