/ / Woher weiß ich, ob eine Funktion inline ist oder nicht? - C ++, Inline

Woher weiß ich, ob eine Funktion inline ist oder nicht? - C ++, Inline

Wenn ich irgendeine Funktion als Inline markiere, kann ich dann wissen, ob die Funktion inline wird oder nicht?

Antworten:

27 für die Antwort № 1

Mit GCC können Sie verwenden -Winline Compiler-Option:

-Winline Warnt, wenn eine Funktion nicht inline ausgeführt werden kann und inline deklariert wurde.

Das man Datei für gcc fährt fort zu sagen:

Selbst mit dieser Option wird der Compiler nicht warnenÜber Fehler bei Inline-Funktionen, die in Systemheadern deklariert sind.  Der Compiler verwendet eine Vielzahl von Heuristiken, um zu bestimmen, ob oder keine Inline-Funktion. Zum Beispiel nimmt der Compiler an berücksichtigen Sie die Größe der Funktion inline und die Menge von Inlining das wurde bereits in der aktuellen Funktion gemacht. Daher scheinbar unbedeutende Änderungen im Quellprogramm kann dazu führen, dass die von -Winline erzeugten Warnungen erscheinen oder verschwinden.

9 für die Antwort № 2

Sehen Sie sich die Assemblersprache an, die der Compiler ausgibt. Zum Beispiel, kompilieren mit g ++:

g++ -S -c foo.c

erstellt eine Datei namens foo.s, die die Ausgabe der Assemblersprache enthält. Alternativ und erneut mit dem GCC-Toolset verwenden Sie objdump:

g++ -c foo.c
objdump -d foo.o

Andere Toolsets haben ähnliche Funktionen.


6 für die Antwort № 3

1, Blick auf den Assembler-Ausgang
2, warum kümmert es dich?