dans GCC code>, comment puis-je vérifier les définitions de préprocesseur
3 Réponses :
Les macros prédéfinies dépendent de la norme et de la manière dont le compilateur l'implémente. P>
pour GCC: http://gcc.gnu.org/onlinedocs/cppp /Predefined-macros.html p>
pour Microsoft Visual Studio 8: http: // msdn .microsoft.com / fr-US / US / Bibliothèque / B0084Kay (vs.80) .aspx P>
Cette page Wikipedia http://en.wikipedia.org/wiki/c_preprocessor#Compiler -pecific_predefined_macros énumère comment vider à certaines des macros prédéfinies p>
Juste pour enregistrer la réponse: GCC -DM -E - dev / null
Un programme peut définir une macro à un pointez, supprimez cette définition plus tard, puis fournir un différent Définition après cela. Ainsi, à différents points dans le programme, un macro peut avoir des définitions différentes, ou n'avez aucune définition du tout. p> blockQuote>
Généralement vrai pour les macros, mais la question portait sur les macros prédéfinies
@Cstamas: Vous dites que vous ne pouvez pas définir des macros prédéfinies?
@Mitch Beat: Non, ne pas dire ça. Mais la question était différente.
Bien que votre réponse soit vraie, certaines macros sont définies par le compilateur et elles seraient étranges pour qu'ils soient indéfinis.
une source probable des macros prédéfinies pour une combinaison spécifique de compilateur et de plate-forme est le Projet PREDEF à Sourceforge. Ils tentent de maintenir un catalogue de toutes les macros prédéfinies dans tous les compilateurs C et C ++ sur toutes les plateformes. En pratique, ils ont une couverture d'un nombre juste de plates-formes pour GCC et un sourire d'autres compilateurs. p>
Ils ont obtenu cela à travers une combinaison de lecture minutieuse de la documentation, ainsi que d'un script shell qui déterminait les macros prédéfinies de la manière difficile: il les essaie. Ma compréhension est que cela essaie réellement chaque chaîne qu'il peut trouver dans l'image exécutable du compilateur et / ou du préprocesseur pour voir s'il a une signification prédéfinie. p>
Ils ajouteront avec plaisir à ajouter des informations qu'ils n'ont pas encore à leur base de données. P>
Dans GCC, do
GCC -DM -E - dev / null code>. Il y a un commutateur similaire pour MSVC mais je ne m'en souviens pas.