Question

En général, j'ai parfois une chaîne de macros imbriquées avec quelques éléments conditionnels de préprocesseur dans leurs définitions. Cela peut être difficile à déboguer car il est difficile de voir directement le code en cours d’exécution.

Il y a quelque temps, je me souviens vaguement d'avoir trouvé un drapeau de compilation (gcc) pour les développer, mais j'avais du mal à le faire fonctionner dans la pratique.

Était-ce utile?

La solution

gcc -E affichera la source prétraitée sur stdout.

Autres conseils

Pour les utilisateurs de MSVC, vous pouvez cliquer avec le bouton droit sur le fichier / projet, afficher les paramètres et modifier les propriétés du fichier afin de générer une source prétraitée (généralement située dans le répertoire obj).

Cela pourrait ne pas s'appliquer dans votre cas, mais les macros entravent vraiment le débogage et sont souvent surutilisées et évitables.

Pouvez-vous les remplacer par des fonctions intégrées ou les supprimer tous ensemble?

Vous devriez probablement commencer à vous éloigner des macros et commencer à utiliser inline et les modèles.

Les macros sont un ancien outil, parfois le bon outil. En dernier recours, souvenez-vous que printf est votre ami (et en fait, printf n’est pas un si mauvais ami lorsque vous faites du multithread)

Déboguez le désassemblage avec les symboles chargés.

gcc -save-temps écrira un fichier .i (ou un fichier .ii pour C ++) qui est la sortie du préprocesseur C, avant qu'il ne soit remis au compilateur. Cela peut souvent être instructif.

GCC et les compilateurs compatibles utilisent l’option -E pour exporter la source prétraitée vers la sortie standard.

gcc -E foo.cpp

Sun Studio prend également en charge cet indicateur:

CC -E foo.cpp

Mais encore mieux est -xdumpmacros. Vous pouvez trouver plus d'informations dans la documentation de Suns.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top