3 Stimmen

Das Parsen/Debuggen/Portieren eines C++-Programms mit vielen Makros.

Ich frage mich nur, ob jemand bei der Suche nach einem guten Tool für die Aufgabe helfen könnte. Ich habe ein großes Programm in C/C++, das von Win32 auf Linux portiert werden muss. Da der "Wrapper" (d. h. der am stärksten vom Betriebssystem abhängige) Teil erfolgreich von den internen des Programms isoliert wurde, beinhaltet diese Aufgabe nur das Durchgehen des "Innenlebens". Einige Dinge funktionieren, einige verursachen kleine Kompilierungsprobleme, aber es gibt einen RIESIGEN unpraktischen Teil - die Verwendung von Makros.

Im Wesentlichen sehen die meisten internen Teile wie folgt aus:

START_MAIN( ... )
  SOME_MACRO( ... )
  ANOTHER_MACRO( ... )
  WRITE_SOMETHING()
END_MAIN()

Dies macht C/C++ wie Pascal aussehen, aber verursacht auch viel schmerzhaften Aufwand beim Versuch herauszufinden, "was falsch ist".

Gibt es IRGENDWELCHE Tools, die beim Parsen dieser Art von Quellen helfen, um zu den Wurzeln der Probleme zu gelangen?

Ich nähere mich langsam (manuell) der "Kompilierbarkeit" dieses Programms, aber alles, was mir helfen könnte, dieses (künstlich strukturierte) Durcheinander zu durchschauen, wäre wirklich geschätzt.

1voto

Karel Petranek Punkte 14845

Wenn Sie die Kompilierung, Ausgabe und ähnliche Dinge manuell anpassen müssen (z.B. auf der Suche nach einem anpassbaren C++-Parser), ist clang ein gutes Werkzeug, um damit zu beginnen.

Falls Sie nur den vorverarbeiteten Code (mit expandierten Makros) sehen möchten, können Sie Compiler-Flags verwenden:
MSVC: fügen Sie /P zu den C++-Compiler-Flags hinzu (Projekt -> Eigenschaften -> C/C++ -> Befehlszeile)
GCC, Clang: Fügen Sie die -E Compiler-Flagge hinzu

Diese Frage zur Vorverarbeitung von C++-Code enthält einige Antworten, die für Sie nützlich sein könnten.

0voto

lnqhien Punkte 59

Eclipse CDT wird Makros erweitern und Ihnen sogar anzeigen, wie viele Makroauswertungen erforderlich waren, um den endgültigen Code zu erreichen, der vom Preprozessor ausgegeben würde.

http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.cdt.doc.user/concepts/cdt_c_whatsnew.htm

Schauen Sie sich den Abschnitt "Makroerkundung" an.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X