8
votes

Qu'est-ce que les macros de pré-processeur C ont déjà été définis dans GCC?

dans GCC , comment puis-je vérifier les définitions de préprocesseur C en place pendant la compilation d'un programme C, en particulier quelles définitions de macro standard ou spécifiques à la plate-forme sont défini?


1 commentaires

Dans GCC, do GCC -DM -E - . Il y a un commutateur similaire pour MSVC mais je ne m'en souviens pas.


3 Réponses :


16
votes

Les macros prédéfinies dépendent de la norme et de la manière dont le compilateur l'implémente.

pour GCC: http://gcc.gnu.org/onlinedocs/cppp /Predefined-macros.html

pour Microsoft Visual Studio 8: http: // msdn .microsoft.com / fr-US / US / Bibliothèque / B0084Kay (vs.80) .aspx

Cette page Wikipedia http://en.wikipedia.org/wiki/c_preprocessor#Compiler -pecific_predefined_macros énumère comment vider à certaines des macros prédéfinies


1 commentaires

Juste pour enregistrer la réponse: GCC -DM -E -



0
votes

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.


4 commentaires

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.



4
votes

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.

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.

Ils ajouteront avec plaisir à ajouter des informations qu'ils n'ont pas encore à leur base de données.


0 commentaires