Der g ++ - Compiler hat ein Flag, das Makro-expandierten Code (-E) erzeugt, also frage ich mich, ob es eine Möglichkeit gibt, das Programm nach der Template-Instanziierung anzuzeigen, bevor die eigentliche Kompilierung stattfindet?Ist es möglich, C++ - Code mit instanziierten Templates anzuzeigen, bevor es kompiliert wird (g ++)?
Ist es möglich, C++ - Code mit instanziierten Templates anzuzeigen, bevor es kompiliert wird (g ++)?
Antwort
Nun, je näher Sie erhalten können, ist der AST/ABT vom Compiler generierte zu lesen:
- AST: Abstract Syntax-Baum
- ABT: Abstract Tree Bindung
ehemaligen stellt die Ansicht der Syntax dar, wie der Compiler sie versteht und die letztere ähnlich ist nach Auflösung der Bindungen (dh, dass die a
hier ist eigentlich die Variable, die 3 Zeilen zuvor deklariert wurde oder dass die foo
der in diesem Header definierten Funktion entspricht ...).
Clang erlaubt es, seinen AST zu entladen ... was in Wirklichkeit der ABT ist, eigentlich wird er in diesem Moment verbessert; Sneak Entwickler-Vorschau:
int Test __attribute__((visibility("default")));
int main(int argc, char** argv) {
int x __attribute__((aligned(4))) = 5;
int y = 2;
for (;;)
if (x != y++)
break;
return (x * y);
}
Normalerweise sollten Sie sehen, wie die Vorlage dort instanziiert wurde.
Hinweis: Um es zu bekommen, brauchen Sie den -ast-dump
Pass zum Clang-Front-End.
Der Schlüssel hier ist wirklich _no_. :) –
Schade Template-Instantiierung ist * Teil * der eigentlichen Kompilierungsprozess ... und auch nicht einer am Anfang, es ist ein Schritt irgendwo in der Mitte. Vorlagen werden auch bei Bedarf instanziiert. – Xeo
Kommentar von dem ziemlich dummen Teil meines Gehirns: benutze "g ++ -S" und inspiziere den generierten Assembler Code! –
@Xeo Die fac, dass sie ein Teil des Kompilierungsprozesses sind, ist ein Problem sicher, aber dass sie bei Bedarf instanziiert werden, sehe ich nicht als ein Problem. Warum sollte es (hypothetisch) nicht möglich sein, eine separate .log-Datei mit instanziierten Templates (für diejenigen, die angefordert werden) auszugeben? Wäre es nicht ein wenig einfacher, Vorlagencodes zu debuggen? Fragen Sie einfach ... – tmaric