können Sie das always_inline
Attribut verwenden, zum Beispiel:
void foo() __attribute__((always_inline));
Vom docs
always_inline Im Allgemeinen werden Funktionen nicht inlined es sei denn, Optimierung angegeben ist. Bei inline deklarierten Funktionen wird die Funktion in das Attribut eingeschlossen, auch wenn keine Optimierungsebene angegeben wurde.
Note1: Es gibt keine Notwendigkeit inline
zu verwenden, wenn Sie das always_inline
Attribut
Note2: Ist die Funktion nicht inline sein könnte erhalten Sie eine Warnung, ist die Definition, wenn beispielsweise nicht zur Verfügung, wenn jedoch kompilieren, um eine höhere Optimierung gcc immer noch in die Anrufer Inline kann, gibt es einen speziellen Schalter für das auch:
-funit-at-a-time
Von der docs:
Optimierungsstufen -O2 und höher, insbesondere ermöglichen Einheit-at-a-time-Modus, die die Compiler aus späteren Funktionen in der Datei gewonnenen Informationen berücksichtigen kann, wenn eine Funktion Kompilieren . Kompilieren mehrerer Dateien auf einmal zu einer einzigen Ausgabedatei Einheit-auf-Zeit-Modus ermöglicht dem Compiler, Informationen aus alle Dateien beim Kompilieren von jedem von ihnen gewonnen.
Note3: Es ist nicht notwendig, einen expliziten Prototyp haben, so dass Sie das Attribut auf die Funktion defintion verwenden können:
__attribute__((always_inline)) void foo() {
//some code
}
Auch diese discussion sehen, beantwortet sie einige Ihrer Fragen.
funktioniert es auch, wenn die Definition der Funktion nicht verfügbar ist, wenn eine bestimmte Einheit kompiliert wird? Wie behandelt der Compiler eine solche Situation? – sgupta
@ user1075375 Wie kann die Definition einer Funktion nicht verfügbar sein? es muss dort sein, sonst wird es nicht kompilieren/verknüpfen – iabdalkader
"Wenn eine Funktionsimplementierung nicht in der Headerdatei und in einer separaten Kompilierungseinheit ist, kann es nicht inlined sein, es sei denn, Sie haben einen Compiler, der LTCG ausführen kann" von http: // stackoverflow.com/questions/5187735/how-to-inline-string-h-funktion-on-linux?rq = 1 – sgupta