C++ Source Code kurz orm kompilieren abfangen?
-
Die Frage gabs AFAIR schon mal. Forensuche hilft.
-
Beim GCC kannst du mit der -S Option dir Assemblercode ausgeben lassen oder bist du nur an Lösungen für den cl (MSVC++) interessiert?
-
@Walli:
Mit der Suche stimmt was nicht? Ich habe gerade versucht im MFC Forum nach int zu suchen. Sieht so aus als wenn dort noch niemand einen "int" verwendet hat.@kingruedi: Eigentlich bin ich nur an Lösungen für den Microsoft Kompiler interessiert. Der MFC Source wird sich nicht so einfach vom GCC kompilieren lassen.
-
Herfried Gummer schrieb:
Der MFC Source wird sich nicht so einfach vom GCC kompilieren lassen.
Ist der dermaßen Standardinkompatibel?
Das was du suchst, gibt es nicht. Optimieren tut der Comiler und dieser erzeugt Binärcode.
-
Es gibt doch den Zwischencode. Das ist noch kein Binärcode. Den könnte man sich ausgeben lassen. Und sowas wie Konstanten soweit wie möglich einzusetzen sollte nicht schwer sein und jeder Kompiler machen.
-
Es gibt für C++ zwei Übersetzungsmodele:
1. Code => Preprocessor => Preprocesster Code => Compiler => Asm code => Assembler => Objekt Datei(en) => Linker => Exe
2. Code => Preprocessor => Preprocesster Code => C++ Compiler => C Code (=> Preprocessor => Preprocesster Code) => C compiler => Asm code => Assembler => Objekt Datei(en) => Linker => ExeNumber 1 ist das geläufigste Model. Bei Number 2 sind mir 2 Compiler bekannt Cfront und Comeau. Ersterer wird meines Wissen nach nicht mehr weiter entwickelt.
Dann gibt es noch MSs C++/CLI welches AFAIK ähnlich wie Java zu Bytecode compiliert welches dann von einer Virtuellen Maschine interpretiert wird. Meiner Meinung nach kann man C++/CLI auf Grund der vielen Erweiterungen nicht mehr als C++ bezeichen.
-
Es gibt zwei Formen von Konstanten:
#define foo 1 const int foo = 1;
Erstere werden durch den Präprozessor ersetzt. Das ist das was du vermutlich meinst. Zweitere sind für den Compiler konst. Variablen die erst beim compilieren berücksichtig werden => Binärcode.
Ein weiteres Zwischenformat ist mir nicht bekannt.
-
Ben04 schrieb:
Es gibt für C++ zwei Übersetzungsmodele:
es gibt auch welche die machen gleich .obj-files, ohne den asm zwischenschritt
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum MFC mit dem Visual C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Bei MSVC6 gibts die Compiler-Schalter:
- /E
- /P
- /EP
Lies dir mal die Hilfe dazu durch das könnte möglicherweise was für dich sein.
-
@Readhead: Das kannte ich schon. Da läuft nur der Preprozessor rüber und ersetzt alle defines und baut alles zu einem großen stück source zusammen. Mir geht es aber darum die constanten Strings die bei einem bestimmten Funktionsaufruf verwendet werden herauszufiltern. Der Kompiler wird die wohl alle soweit es geht schon zur Compiletime sustitutieren.
Der Cameau Kompiler ist nicht frei. Außerdem scheint er auch keine Optimierung in meinem Sinne vorzunehmen...
Momentan bin ich dabei die einzelnen obj Dateien (zu jeder cpp) zu analysieren. Ist wohl die einzige Möglichkeit...
-
net schrieb:
Ben04 schrieb:
Es gibt für C++ zwei Übersetzungsmodele:
es gibt auch welche die machen gleich .obj-files, ohne den asm zwischenschritt
Bei GCC kannst du auch per
g++ -o test.exe test.cpp
alles in einem Befehl machen
Was ich meinte waren die zwischen Dateien die erzeugt werden. Natürlich kann man dem Compiler auch sagen er solle sie wieder löschen oder gar nicht erst erstellen und den Code per Stream weitergeben allerdings das heist ja nicht, dass es sie nicht gibt.