Il peut arriver que l'on ait besoin de connaître les constantes prédéfinies de son compilateur.
Par exemple, cela peut servir à comparer deux compilateurs. C'est également utile lorsque l'on souhaite utiliser des directives de précompilations (#ifdef) pour encadrer des optimisations spécifiques. On s'en sert également lorsque l'on souhaite analyser l'impact de certaines options de compilation.
Voici comment lister les macros de GCC :
gcc -dM -E -xc /dev/null
Évidemment, ce sont les mêmes options avec un compilateur croisé.
Plus précisément, il ne s'agit pas d'interroger le compilateur mais le préprocesseur (cpp) qui fournit les macros décrivant la configuration du compilateur. Cependant, on peut utiliser les commandes gcc ou cpp indifféremment. En effet, gcc encapsule l'appel aux outils associés de la chaîne de compilation.
Mais au fait, que signifient ces options ?
- -dM : afficher les macros #define, y compris celles prédéfinis
- -E : s'arrêter après le préprocesseur (ne pas compiler)
- -xc : forcer le langage C
- /dev/null : fichier vide en guise de code source
Il peut être intéressant d'ajouter certaines options de compilation telles que -std= pour spécifier le standard C utilisé (C89, C99).
À ce propos, si vous cherchez à configurer la conformité (BSD, POSIX) ou diverses options de votre libc, les macros à définir sont documentées ici :
man feature_test_macros