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?



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.


79

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

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

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)


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.