web-dev-qa-db-fra.com

Comment voir un fichier source C / C ++ après le prétraitement dans Visual Studio?

Disons que j'ai un fichier source avec de nombreuses directives de préprocesseur. Est-il possible de voir à quoi il ressemble une fois que le préprocesseur en a terminé?

200
Geo

cl.exe, l'interface de ligne de commande de Microsoft Visual C++, propose trois options différentes pour la sortie du fichier prétraité (d'où l'incohérence dans les réponses précédentes concernant Visual C++):

Si vous souhaitez prétraiter un fichier sans directive #line, combinez le fichier /P et /EP Les options.

144
bk1e

La plupart des compilateurs ont une option pour exécuter simplement le préprocesseur. par exemple, gcc fournit -E:

   -E  Stop after the preprocessing stage; do not run the compiler proper.  
       The output is in the form of preprocessed source code, which is sent
       to the standard output.

Donc, vous pouvez juste courir:

gcc -E foo.c

Si vous ne trouvez pas une telle option, vous pouvez également rechercher le préprocesseur C sur votre ordinateur. Il s'appelle généralement cpp et se trouve probablement déjà sur votre chemin. Invoquez-le comme ceci:

cpp foo.c

S'il y a des en-têtes que vous devez inclure à partir d'autres répertoires, vous pouvez passer -I/chemin/à/inclure/dir à l'un de ces répertoires, comme vous le feriez avec une compilation normale.

Pour Windows, je laisserai aux autres afficheurs le soin de fournir des réponses car je ne suis pas un expert là-bas.

118
Todd Gamblin

Cliquez avec le bouton droit sur le fichier dans l'explorateur de solutions, allez à Propriétés. Sous Propriétés de configuration -> C/C++ -> Préprocesseur, "Générer un fichier prétraité" est ce que vous recherchez. Cliquez ensuite avec le bouton droit sur le fichier dans l'Explorateur de solutions et sélectionnez "Compiler". Le fichier prétraité est créé dans le répertoire de sortie (par exemple, Release, Debug) avec une extension .i (merci à Steed pour son commentaire).

95
Jim Buck

Vous devez généralement effectuer un post-traitement sur la sortie du préprocesseur, sinon toutes les macros ne font que s'étendre à un seul support, ce qui est difficile à lire et à déboguer. Pour le code C, quelque chose comme ce qui suit suffirait:

gcc -E code.c | sed '/^\#/d' | indent -st -i2 > code-x.c

Pour le code C++, c'est en réalité beaucoup plus difficile. Pour GCC/g ++, j’ai trouvé ce script Perl utile.

18
ididak

Essayez cl /EP si vous utilisez le compilateur C++ de Microsoft.

8
Atempcode

Je ne connais rien au compilateur Microsoft, mais sur GCC, vous pouvez utiliser ceci:

gcc -E -P -o result.c my_file.h

Si vous voulez voir les commentaires, utilisez ceci:

gcc -E -C -P -o result.c my_file.h

Plus d'options disponibles sur cette page .

8
dzav

Dans Visual Studio, vous pouvez compiler un fichier (ou un projet) avec/P.

6
Andreas Magnusson

Comme bk1e et Andreas M. ont répondu à la question, l'option/P du compilateur lui permet de prétraiter un fichier. Cependant, dans mon projet utilisant VS2005 et Platform Builder (pour un processeur incorporé ARM)], le projet ne présentait pas d’option dans la boîte de dialogue (décrite par Jim B) pour activer cette option.

Je pouvais exécuter CL manuellement et ajouter/P, mais cela a échoué car je ne connaissais pas toutes les options de ligne de commande appropriées activées de manière invisible par Platform Builder lors de la génération complète. Donc, j'avais besoin de connaître toutes ces options.

Ma solution a été d'aller voir dans le fichier build.log et trouver la ligne qui s'exécutait

CL blah-blah-blah myfile.c

J'ai copié cette ligne dans le presse-papier. La partie "bla-bla-bla" contenait les options de construction et était énorme.

De retour dans l'EDI, j'ai cliqué avec le bouton droit sur myfile.c, choisi "Ouvrir la fenêtre de construction", puis dans cette fenêtre, j'ai collé la ligne de commande de construction et ajouté un "/ P".

CL /P blah-blah-blah myfile.c

Terminé. Le fichier myfile.i contenant la sortie du préprocesseur a été créé.

5
Sam Pittman

CPIP est un nouveau préprocesseur C/C++ écrit en Python. Si vous voulez une représentation visuelle détaillée d'un fichier prétraité, essayez-le.

CPIP est un pré-processeur C/C++ implémenté en Python. La plupart des pré-processeurs considèrent le pré-traitement comme une tâche sale qui doit être effectuée dès que possible. Cela peut rendre très difficile la recherche de défauts subtils au stade du prétraitement, car les pré-processeurs jettent beaucoup d’informations utiles en faveur d’un résultat aussi économique que possible.

Peu de développeurs comprennent vraiment le pré-traitement, pour beaucoup c'est un peu obscur de magie noire. CPIP vise à améliorer cela et en enregistrant chaque détail du prétraitement afin de permettre à CPIP de produire des informations visuellement magnifiques sur les dépendances de fichiers, l'utilisation de macros, etc.

CPIP n'est pas conçu pour remplacer cpp (ni aucun autre pré-processeur établi), mais considère que la clarté et la compréhension sont plus importantes que la rapidité du traitement.

2
thegreendroid

Sous Windows, une réponse simple d’une ligne à cette question consiste à utiliser la commande ci-dessous dans l’invite DOS pour afficher le fichier prétraité:

CL /P /C myprogram.c

Cela générera un fichier nommé myprogram.i. Ouvrez-le et recherchez vos préprocesseurs développés.

2
manty