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?
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?
Antworten:
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 ++):
/E
: Vorverarbeitung zu stdout (ähnlich der Option -E von GCC)/P
: Vorverarbeitung zur Datei/EP
: Vorverarbeitung zu stdout ohne # line-DirektivenWenn Sie eine Datei ohne # line-Direktiven vorverarbeiten möchten, kombinieren Sie die Optionen /P
und /EP
.
/P
die Erzeugung von obj-Dateien unterdrückt wird. Wenn Sie also /P
Optionen eingeben, wird möglicherweise ein Link-Fehler angezeigt, der besagt, dass einige obj-Dateien nicht gefunden werden können, da sie tatsächlich überhaupt nicht generiert werden.
VS Developer command prompt
und NICHT in befinden, Command prompt
wenn Sie versuchen, MS compiler ( cl
) zu verwenden. Der Compiler ist in der herkömmlichen Eingabeaufforderung nicht verfügbar.
Die meisten Compiler haben die Möglichkeit, nur den Präprozessor auszuführen. zB liefert gcc -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.
Sie können also einfach ausführen:
gcc -E foo.c
Wenn Sie eine solche Option nicht finden, finden Sie auch nur den C-Präprozessor auf Ihrem Computer. Es heißt normalerweise cpp und ist wahrscheinlich schon auf deinem Weg. Rufen Sie es so auf:
cpp foo.c
Wenn Sie Header aus anderen Verzeichnissen einfügen 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.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei und gehen Sie zu 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 "Kompilieren". Die vorverarbeitete Datei wird im Ausgabeverzeichnis (z. B. Release, Debug) mit der Erweiterung .i erstellt (danke an Steed für seinen Kommentar).
Release
, Debug
) mit einer Verlängerung .i
.
In der Regel müssen Sie die Ausgabe des Präprozessors nachbearbeiten. 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.
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 finden Sie auf dieser Seite .
In Visual Studio können Sie eine Datei (oder ein Projekt) mit / P kompilieren.
Wie bk1e und Andreas M. geantwortet haben, bewirkt die Option / P für den Compiler, dass eine Datei vorverarbeitet wird. In meinem Projekt mit VS2005 und Platform Builder (für einen eingebetteten ARM-Prozessor) wurde im Dialogfeld (wie von Jim B beschrieben) keine Option zum Aktivieren dieser Option angezeigt.
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 ausgeführten Zeile zu suchen
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.
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 nur 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 obskures Stück schwarzer Magie. CPIP zielt darauf ab, dies zu verbessern, und indem jedes Detail der Vorverarbeitung aufgezeichnet wird, damit CPIP einige wunderbar visuelle Informationen über Dateiabhängigkeiten, Makronutzung usw. erzeugen kann.
CPIP ist nicht als Ersatz für cpp (oder einen anderen etablierten Vorprozessor) konzipiert, sondern CPIP betrachtet Klarheit und Verständnis als wichtiger als die Verarbeitungsgeschwindigkeit.
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
Dadurch wird eine Datei mit dem Namen myprogram.i generiert . Öffnen Sie es und achten Sie auf Ihre erweiterten Präprozessoren.