2016-07-10 15 views
-2

Ich frage mich, ob einige C/C++ - Compiler etwas Ähnliches zu Pfand Stock Schlüsselwort implementieren.Pawn "Lager" -Funktion Homolog in C/C++

In Pfand, können Sie eine Funktion wie das erklären:

stock xfunc(a, b) 
{ 
    [...] // Bla bla 
} 

Die Aktie Schlüsselwort teilt dem Compiler einfach nicht die Funktion in der kompilierten binären schließen, wenn sie nicht irgendwo im Code genannt wird. Dies macht die Funktion sozusagen fakultativ und erhöht die binäre Größe nicht, wenn sie nicht verwendet wird.

Ich würde es nützlich finden, etwas in C/C++ zu haben, weil ich einige Funktionen einschließen möchte, die ich nicht sofort in den ersten Iterationen meines Programms/Codes verwenden werde. Natürlich könnten mir einige Leute sagen, dass es andere Wege gibt, dies zu tun, wie zum Beispiel Preprozessor-Makros usw. Ich frage nicht nach einem anderen Weg, ich möchte etwas, das mir erlaubt, diese Funktionen später zu nutzen, ohne sie auskommentieren zu müssen, Ändere ein Makro, damit es kompiliert wird usw. (dh nahtlos). ABER ... ohne sie zu kompilieren und dadurch meine ausführbare Datei zu vergrößern, wenn ich sie nicht benutze!

Eine praktische Funktion würde ich sagen. Danke!

P.S. Wenn die Antwort lautet: "Es ist nicht in den Sprachstandards enthalten", gibt es dann Compiler, die das mit bestimmten Pragmas, inoffiziellen Keywords usw. tun?

EDIT: Sollte ich erwähnen, interessiert mich vor allem diese Funktion für die virtuelle Funktion. Ich bin mir bewusst, Funktionsebene Verknüpfung für Standardfunktionen existiert, aber was ist mit virtuellen? Ich denke normalerweise, wenn ich mich nicht irre, werden virtuelle funcs kompiliert, selbst wenn sie nicht verwendet werden, um das Klassenlayout mit einem Klassenprototyp kompatibel zu halten? Kannst du bestätigen? Danke

+6

Dies wird normalerweise automatisch während der Verknüpfungsphase gelöst, c oder C++ braucht kein solches Schlüsselwort. –

+0

imho sobald ich eine Funktion geschrieben habe Ich will, dass es Kompilierfehler so schnell wie möglich zu fangen kompiliert, also würde ich nie Makros oder Kommentare verwenden, um es von der Kompilierung auszuschließen, wie auch immer es nicht in die ausführbare Datei machen wird, wenn es nicht verwendet wird andere) – user463035818

+0

Praktisch * alle * Compiler machen es nahtlos. Dies muss nicht Teil der Sprachstandards sein. Ich verstehe nicht, warum es für den Entwickler an der Tagesordnung sein sollte, eine Funktion wie diese zu kommentieren, wenn der Linker die Entscheidung viel besser treffen könnte. Wenn Sie wissen, dass etwas ungenutzt bleibt, schreiben Sie es einfach nicht. –

Antwort

2

Jeder moderne Optimierung Compiler/Linker wird "tote Code Eliminierung" tun und nicht nur nicht aufgerufene Funktionen, sondern auch unbenutzte Bits der aufgerufenen Funktionen ausstrippen.

+0

Gilt das auch für eine virtuelle Funktion? Welches ist das Hauptmotiv zu meiner Frage (aber etwas vergessen zu erwähnen, jetzt habe ich). – Yannick

+1

Solange der Compiler sehen kann, dass es nicht verwendet wird. Wenn Sie Zweifel haben, kompilieren Sie ein Beispiel und schauen Sie sich die generierte ASM an. –