Frage

In der Regel habe ich gelegentlich eine Kette von verschachtelten Makros mit ein paar Präprozessor bedingte Elemente in ihren Definitionen. Diese können schmerzhaft sein zu debuggen, da es schwer ist, direkt der eigentliche Code siehe ausgeführt wird.

Vor einiger Zeit vage erinnere ich mich an einen Compiler (gcc) Fahne zu finden, sie zu erweitern, aber ich hatte Mühe, dies in der Praxis zu arbeiten.

War es hilfreich?

Lösung

gcc -E ausgeben wird die vorverarbeiteten Quelle stdout.

Andere Tipps

Für MSVC Benutzer können Sie mit der rechten Maustaste auf die Datei / Projekt, zeigen Sie die Einstellungen und die Dateieigenschaften vorverarbeitet Ausgangsquelle ändern (die typischerweise im obj-Verzeichnis).

Dies könnte nicht in Ihrer Situation anwendbar sein, aber Makros wirklich Debuggen tun behindern und sind oft überstrapaziert und vermeidbar.

Können Sie sie mit Inline-Funktionen ersetzen oder auf andere Weise los werden alle zusammen?

Sie sollten wahrscheinlich starten Form Macros weg und beginnen Inline- und Vorlagen.

Makros sind ein altes Werkzeug, das richtige Werkzeug manchmal. Als letztes Mittel erinnert printf ist dein Freund (und eigentlich ist printf nicht so schlecht ein Freund, wenn Ihre multithreaded Sachen tun)

Debug die dissasembly mit den Symbolen geladen.

gcc -save-temps schreiben, wird eine .I (oder .ii Datei für C ++), die das Ausgangssignal des C-Vorprozessor ist, bevor es an den Compiler übergeben wird. Dies kann oft aufschlussreich sein.

GCC und kompatible Compiler verwenden, um die Option -E für die Ausgabe an den vorverarbeiteten Quellen Standard aus.

gcc -E foo.cpp

Sun Studio unterstützt auch dieses Kennzeichen:

CC -E foo.cpp

Aber noch besser ist -xdumpmacros. Sie können mehr Informationen in Suns' docs finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top