Möglich durch Templates generierten Code zu sehen ?
-
quatsch, mit -E als compilerflag (Bei G++) wird der gesamte präprozessorverarbeitete code auf der standard ausgabe dargestellt, wenn auch noch -o da ist, dann in der darauf folgenden Datei
bsp
g++ -E -o file.ii file.cpp
-
Krux schrieb:
quatsch, mit -E als compilerflag (Bei G++) wird der gesamte präprozessorverarbeitete code auf der standard ausgabe dargestellt
Dir ist aber hoffentlich klar, daß Templates (und dem Thread-Titel nach geht es KasF um Templates) nichts mit dem Präprozessor zu tun haben? Die kommen so wie sie sind in den Compiler und werden dann von diesem ausgewertet und instanziiert.
-
CStoll schrieb:
Klar kannst du dir den Code ansehen - du mußt das fertige Programm nur durch einen Dissasambler jagen
(oder gute Kenntnisse in Maschinencode mitbringen)Ich meinte den Code in C++

Also das kompilier:
template<class T> void func(T a) { } func(4); func(4.0);Und ich dann sehe:
void func(int a) { } void func(double a) { }Wäre nämlich mal ganz interessant zu sehen was alles bei der TMP entsteht ...
-
CStoll schrieb:
Krux schrieb:
quatsch, mit -E als compilerflag (Bei G++) wird der gesamte präprozessorverarbeitete code auf der standard ausgabe dargestellt
Dir ist aber hoffentlich klar, daß Templates (und dem Thread-Titel nach geht es KasF um Templates) nichts mit dem Präprozessor zu tun haben? Die kommen so wie sie sind in den Compiler und werden dann von diesem ausgewertet und instanziiert.
Sorry, hab mich geirrt, es verarbeitet nur Pröprozessorbefehle mit #etc.
Hab gedacht die würden auch verarbeitet werden, deshalb hab ich grad auch noch mal getestetaber der diassembler ist denke ich wirklich nicht nötig, denn mit -S bekommt man den Assemblercode in eine Datei geschrieben.
-
Hi,
also so richtigen C++-Code wüsste ich jetzt nicht, aber der gcc bietet die Option "-frepo":
... Compile your template-using code with ‘-frepo’. The compiler will generate files with the extension ‘.rpo’ listing all of the template instantiations used in the corresponding object files which could be instantiated there ...
Da habe ich allerdings noch nie reingesehen, ob das was Sinnvolles/Verständliches ist.
Gruß,
Simon2.
-
Simon2 schrieb:
also so richtigen C++-Code wüsste ich jetzt nicht, aber der gcc bietet die Option "-frepo":
Thx, habe ich gerade ausprobiert und dann bekomme ich undefined references vom Linker
Ich mach mich dann mal weiter schlau ...
-
KasF schrieb:
Simon2 schrieb:
also so richtigen C++-Code wüsste ich jetzt nicht, aber der gcc bietet die Option "-frepo":
Thx, habe ich gerade ausprobiert und dann bekomme ich undefined references vom Linker
Ich mach mich dann mal weiter schlau ...Hi,
naja in der Doku steht dann auch, dass ein spezieller Link(wrapp)er aufgerufen werden muss ... aber ich dachte eigentlich eher, dass Du Dir mal das rpo-File in einem Editor ansiehst.
Gruß,
Simon2.
-
Es hatte doch funktioniert und die rpo wurde trotz den Fehlern erstellt
Habe mir jetzt mal die rpo angesehen und da steht nicht das was ich sehen wollte:O _Z4funcIdEvT_ O _Z4funcIiEvT_
-
Sorry, hätte ja sein können.
Gruß,
Simon2.
-
Simon2 schrieb:
Sorry
Musst dich doch nicht entschuldigen

-
Hallo,
ich vermute mal, den Code kann man sich deswegen nicht ansehen, weil er nicht gut erstellbar ist. Die Templates werden ja wahrscheinlich erst spät nach dem Parsen ersetzt und diese Ersetzungen finden dann halt nicht im Quellcode sondern im AST statt. Und um daraus wieder C++-Code zu schreiben müsste sich der Compiler plötzlich irgendwelche Symbolnamen aus den Fingern saugen (mal davon abgesehen, dass einige Konstrukte wie Variablendeklarationen zu diesem Zeitpunkt sowieso plattgemacht worden sind und sich an sich nicht mehr 1:1 rekonstrukieren lassen, wenn der AST nicht entsprechende Annotationen trägt).
-
Konrad Rudolph schrieb:
Hallo,
ich vermute mal, den Code kann man sich deswegen nicht ansehen, weil er nicht gut erstellbar ist. Die Templates werden ja wahrscheinlich erst spät nach dem Parsen ersetzt und diese Ersetzungen finden dann halt nicht im Quellcode sondern im AST statt. Und um daraus wieder C++-Code zu schreiben müsste sich der Compiler plötzlich irgendwelche Symbolnamen aus den Fingern saugen (mal davon abgesehen, dass einige Konstrukte wie Variablendeklarationen zu diesem Zeitpunkt sowieso plattgemacht worden sind und sich an sich nicht mehr 1:1 rekonstrukieren lassen, wenn der AST nicht entsprechende Annotationen trägt).
Klingt einleuchtend. AST ?
-
-
Thx