Inspizieren vom Compiler generierter Vorlageninstanziierungen in C
In C ermöglichen Vorlagenfunktionen und -klassen die Wiederverwendung von Code, indem sie generische Funktionen definieren, die möglich sind spezialisiert auf verschiedene Typen. Um den vom Compiler für eine Vorlageninstanziierung generierten Code zu verstehen, ist es hilfreich, Einblick in diese instanziierten Funktionen oder Klassen zu haben.
Clangs AST-Druckfunktion
Ein Tool Für diese Sichtbarkeit sorgt die AST-Druckfunktion (Abstract Syntax Tree) von Clang, einem weit verbreiteten Compiler für C. Der AST stellt die interne Darstellung des Codes vor der Kompilierung dar, einschließlich des generierten Codes für Vorlageninstanziierungen.
Um den instanziierten AST für eine C-Vorlage zu drucken, rufen Sie Clang mit dem Flag -Xclang -ast-print zusammen mit auf -fsyntax-only-Flag, um die tatsächliche Kompilierung zu verhindern.
Betrachten Sie beispielsweise den folgenden Code:
template T add(T a, T b) {
return a b;
}
void tmp() {
add(10, 2); // Call the template with int specialization
}
Um den AST für diesen Code anzuzeigen, führen Sie den folgenden Befehl aus:
$ clang -Xclang -ast-print -fsyntax-only test.cpp
Beispielausgabe
Die Ausgabe enthält den AST, einschließlich der instanziierten add
templateT add(T a, T b) { return a b; } template int add (int a, int b) { return a b; } void tmp() { add (10, 2); }
In dieser Ausgabe wird die instanziierte Funktion add
Fazit
Clangs AST-Druckfunktion bietet eine nützliche Möglichkeit, den vom Compiler generierten Code auf Vorlageninstanziierungen zu überprüfen. Dies kann für das Verständnis der Implementierungsdetails, das Debuggen und die Optimierung von vorlagenbasiertem Code in C von unschätzbarem Wert sein.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3