Heim >Backend-Entwicklung >C++ >Was ist der Unterschied zwischen „inline', „static inline' und „extern inline' in C und C?

Was ist der Unterschied zwischen „inline', „static inline' und „extern inline' in C und C?

Barbara Streisand
Barbara StreisandOriginal
2024-12-24 17:51:11268Durchsuche

What's the Difference Between `inline`, `static inline`, and `extern inline` in C and C  ?

Extern Inline verstehen

In C-Programmiersprachen bieten Inline-Funktionen dem Compiler einen Hinweis, wie er den Code potenziell optimieren kann, indem er den Funktionskörper direkt einfügt zum Zeitpunkt des Aufrufs, anstatt einen separaten Unterprogrammaufruf zu generieren.

Unterschiede zwischen Inline Variationen

In K&R C und C89 gab es keine Standardsemantik für Inline, aber viele Compiler unterstützten es mit unterschiedlichen Interpretationen. GCC hat drei Varianten eingeführt: Inline, statisches Inline und externes Inline.

  • inline: Schlägt eine Inline-Optimierung vor, es wird jedoch auch eine Out-of-Line-Version generiert. Über Kompilierungseinheiten hinweg kann nur eine Definition vorhanden sein.
  • extern inline: Ähnlich wie inline, es wird jedoch keine Out-of-line-Version generiert. Es kann jedoch ein Aufruf einer Out-of-Line-Version erfolgen, die in einer anderen Kompilierungseinheit vorhanden sein muss.
  • static inline: Erzeugt eine statische, aber von außen nicht sichtbare Datei. Inline-Version. Es wird keine Out-of-Line-Version generiert.

C99 und GNU99

In C99 wurde die Semantik für externes Inline überarbeitet, um das Inline-Verhalten von GNU89 widerzuspiegeln. Inline und statisches Inline blieben gleich.

C

In C müssen Inline-Funktionen überall dort, wo sie verwendet werden, dieselbe Definition haben. Mehrere Definitionen desselben Symbols werden vom Compiler/Linker verarbeitet. Weder statisches Inline noch externes Inline sind in C definiert, obwohl einige Compiler sie möglicherweise unterstützen.

Inlining mit externem Inline sicherstellen

In Ihrem spezifischen Szenario, in dem Sie Inlining benötigen für Funktionen, die FILE- und LINE-Makros verwenden, extern inline garantiert nicht, dass die Funktion inline ist. Es ist jedoch das C99-Äquivalent, das diesem gewünschten Verhalten am nächsten kommt. Wenn die Funktion nicht inline wird, gibt der Compiler oder Linker möglicherweise einen Fehler aus.

Compiler- und Anbieterunterschiede

Das Verhalten verschiedener Compileranbieter und -versionen kann daher unterschiedlich sein Es ist immer ratsam, die spezifische Dokumentation für Ihre Umgebung zu konsultieren.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „inline', „static inline' und „extern inline' in C und C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn