76 votes

Sortie du préprocesseur

Comment puis-je visualiser la sortie produite par le C pré-processeur, avant sa conversion en fichier objet ?

Je veux voir ce que les définitions de MACRO font à mon code.

103voto

Faisal Feroz Points 4926
gcc -E file.c

o

g++ -E file.cpp

le fera pour vous. L'option -E force le compilateur à s'arrêter après la phase de prétraitement, en envoyant tout ce qu'il a pour le moment sur la sortie standard.

Note : Vous devez certainement avoir des directives #include. Les fichiers inclus sont également prétraités, et vous risquez d'obtenir beaucoup de résultats.

Pour Visual C++, le commutateur est /E qui affiche la sortie du préprocesseur à l'écran.

44 votes

gcc -E -nostdinc contournera les fichiers #include standard

3 votes

Vous devrez peut-être aussi préciser -x c si le fichier que vous traitez n'a pas une extension c standard

2 votes

Vous devrez peut-être préciser -I y -D interrupteurs.

17voto

rdas Points 7360

Vous pouvez également appeler le préprocesseur C directement.

cpp infile outfile

Vérifiez man cpp pour plus d'informations.

0 votes

Joli ! Je préfère celui-ci à celui-là cc -E . Aussi, j'utilise -P pour désactiver également les marchés de ligne (fonctionne avec cc également).

9voto

Pour le GCC,

gcc -E -dM file.c

o

g++ -E -dM file.cpp

devrait faire l'affaire. -dM, comme le manuel du préprocesseur GNU le met devrait générer une liste de directives '#define' pour toutes les macros définies pendant l'exécution du préprocesseur, y compris les macros prédéfinies.

3voto

Cela dépend du compilateur que vous utilisez.
Avec GCC, vous pouvez spécifier l'option -E sur la ligne de commande pour laisser le compilateur produire la sortie du pré-processeur.

1voto

Rhubarb Points 16453

Si vous utilisez CLion de Jetbrains, vous pouvez utiliser l'action "clangd : Prétraiter l'UT actuelle"

Alors frappez shift shift et commencer à taper clangd...

action popup

Il est préférable de l'attribuer à un raccourci pour une réutilisation plus simple dans les préférences->keymap :

enter image description here

Un grand bravo à marcosbento

PS : TU signifie "unité de traduction" (voir ici). Unité de traduction LLVM )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X