it-swarm.com.de

Wie sehe ich eine C / C ++ - Quelldatei nach der Vorverarbeitung in Visual Studio?

Angenommen, ich habe eine Quelldatei mit vielen Präprozessoranweisungen. Ist es möglich zu sehen, wie es aussieht, nachdem der Präprozessor damit fertig ist?

200
Geo

cl.exe, die Befehlszeilenschnittstelle zu Microsoft Visual C++, bietet drei verschiedene Optionen für die Ausgabe der vorverarbeiteten Datei (daher die Inkonsistenz in den vorherigen Antworten zu Visual C++):

Wenn Sie eine Datei ohne # line-Direktiven vorverarbeiten möchten, kombinieren Sie das /P und /EP Optionen.

144
bk1e

Die meisten Compiler haben die Option, nur den Präprozessor auszuführen. z. B., gcc liefert -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.

So können Sie einfach laufen:

gcc -E foo.c

Wenn Sie eine solche Option nicht finden können, können Sie auch nur den C-Präprozessor auf Ihrem Computer suchen. Es heißt normalerweise cpp und befindet sich wahrscheinlich bereits auf Ihrem Weg. Rufe es so auf:

cpp foo.c

Wenn es Header gibt, die Sie aus anderen Verzeichnissen einschließen müssen, können Sie -I/path/to/include/dir an eines dieser Verzeichnisse übergeben, genau wie bei einer regulären Kompilierung.

Für Windows überlasse ich es anderen Postern, Antworten zu geben, da ich dort kein Experte bin.

118
Todd Gamblin

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei, und wählen Sie Eigenschaften. Unter Konfigurationseigenschaften-> C/C++ -> Präprozessor suchen Sie nach "Vorverarbeitete Datei generieren". Klicken Sie dann im Projektmappen-Explorer mit der rechten Maustaste auf die Datei und wählen Sie "Übersetzen". Die vorverarbeitete Datei wird im Ausgabeverzeichnis (z. B. Release, Debug) mit der Erweiterung .i erstellt (danke an Steed für seinen Kommentar).

95
Jim Buck

Normalerweise müssen Sie einige Nachbearbeitungen an der Ausgabe des Präprozessors vornehmen, andernfalls werden alle Makros nur zu einem Liner erweitert, was schwer zu lesen und zu debuggen ist. Für C-Code würde etwa Folgendes ausreichen:

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

Für C++ - Code ist es tatsächlich viel schwieriger. Für GCC/g ++ fand ich dieses Perl-Skript nützlich.

18
ididak

Versuchen cl /EP, wenn Sie den C++ - Compiler von Microsoft verwenden.

8
Atempcode

Ich weiß nichts über Microsoft Compiler, aber auf GCC können Sie dies verwenden:

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

Wenn Sie Kommentare sehen möchten, verwenden Sie diese:

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

Weitere Optionen sind verfügbar auf diese Seite .

8
dzav

In Visual Studio können Sie mit/P eine Datei (oder ein Projekt) kompilieren.

6

Wie bk1e und Andreas M. antworteten, bewirkt die/P-Option für den Compiler, dass eine Datei vorverarbeitet wird. In meinem Projekt mit VS2005 und Platform Builder (für einen eingebetteten ARM Prozessor)) enthielt das Projekt jedoch keine Option im Dialogfeld (wie von Jim B beschrieben), um diese Option zu aktivieren.

Ich konnte CL manuell ausführen und/P hinzufügen, aber es schlug fehl, weil ich nicht alle geeigneten Befehlszeilenoptionen kannte, die von Platform Builder während des vollständigen Builds unsichtbar aktiviert wurden. Also musste ich all diese Optionen kennen.

Meine Lösung bestand darin, in der Datei build.log nach der Zeile zu suchen, die ausgeführt wurde

CL blah-blah-blah myfile.c

Ich habe diese Zeile in die Zwischenablage kopiert. Der Teil "bla-bla-bla" enthielt die Build-Optionen und war riesig.

Zurück in der IDE habe ich mit der rechten Maustaste auf myfile.c geklickt, "Build-Fenster öffnen" ausgewählt und dann in diesem Fenster die Build-Befehlszeile eingefügt und ein "/ P" hinzugefügt.

CL /P blah-blah-blah myfile.c

Getan. Die Datei myfile.i wurde erstellt, die die Präprozessorausgabe enthielt.

5
Sam Pittman

CPIP ist ein neuer C/C++ - Präprozessor, der in Python geschrieben wurde. Wenn Sie eine detaillierte visuelle Darstellung einer vorverarbeiteten Datei wünschen, probieren Sie sie aus.

CPIP ist ein in Python implementierter C/C++ - Vorprozessor. Die meisten Vorverarbeiter betrachten die Vorverarbeitung als schmutzigen Job, der so schnell wie möglich erledigt werden muss. Dies kann es sehr schwierig machen, subtile Fehler in der Vorverarbeitungsphase aufzuspüren, da Vorverarbeiter viele nützliche Informationen wegwerfen, um das Ergebnis so billig wie möglich zu erhalten.

Nur wenige Entwickler verstehen die Vorverarbeitung wirklich, für viele ist es ein dunkles Stück schwarzer Magie. CPIP zielt darauf ab, dies zu verbessern und jedes Detail der Vorverarbeitung aufzuzeichnen, sodass CPIP einige wundervolle visuelle Informationen über Dateiabhängigkeiten, Makronutzung usw. liefern kann.

CPIP ist nicht als Ersatz für cpp (oder einen anderen etablierten Präprozessor) konzipiert, CPIP betrachtet Klarheit und Verständnis als wichtiger als die Verarbeitungsgeschwindigkeit.

2
thegreendroid

Unter Windows besteht eine einfache einzeilige Antwort auf diese Frage darin, den folgenden Befehl in der DOS-Eingabeaufforderung zu verwenden, um die vorverarbeitete Datei anzuzeigen:

CL /P /C myprogram.c

Dies erzeugt eine Datei mit dem Namen myprogram.i. Öffnen Sie es und achten Sie auf Ihre erweiterten Präprozessoren.

2
manty