Inline vs __inline vs __inline__ vs __forceinline?


73

Was sind die Unterschiede zwischen diesen vier Inline- (Schlüssel-) Wörtern?

inline, __inline, __inline__, __forceinline.


Sie sollten auch die Community nach den Empfehlungen für die Verwendung von Inline fragen.
Martin York

Antworten:


86

inlineist das Schlüsselwort in C ++ und C99.

__inlineist ein herstellerspezifisches Schlüsselwort (z. B. MSVC ) für die Inline-Funktion in C, da C89 es nicht hat.

__inline__ist ähnlich, stammt __inlineaber von einem anderen Satz von Compilern.

__forceinlineist ein anderes herstellerspezifisches (hauptsächlich MSVC) Schlüsselwort, das mehr Kraft zum Inline-Funktionieren der Funktion als zum __inlineHinweis verwendet (z. B. Inline, selbst wenn dies zu schlechterem Code führt).

Es gibt auch __attribute__((always_inline))in GCC und klirren.


12
__forceinline ist ein stärkerer Hinweis als inline, aber immer noch nur ein Hinweis ( msdn.microsoft.com/en-us/library/z8y1yy88%28VS.80%29.aspx ).
Joris Timmermans

Vielleicht sollten Sie die "Microsoft-spezifische" Sprache in "herstellerspezifisch" oder ähnliches ändern. Viele der eingebetteten entwicklungsübergreifenden Toolsets, die ich verwende, unterstützen auch __inline und __forceinline. Die Welt ist größer als MSOFT ;-)
Dan

Alles, was __forceinline tut, ist, die Analyse der Overhead- und Nutzenfaktoren von Inlining zu überspringen und es trotzdem zu "erzwingen". Wenn Sie nicht wirklich inline sein müssen, sollten Sie bei C ++ einfach bei Inline bleiben oder bei C bei __inline. Soweit ich weiß, stammt __forceinline von MSVC, wird aber an anderen Stellen verwendet und definiert, insbesondere von GCC (as oben angegeben) im Attributausdruck. Aber natürlich müssen Sie die Inline-Header oder Flags verwenden, damit sie verwendet werden können. Einige IDEs deaktivieren dies standardmäßig, andere aktivieren es standardmäßig. Ich würde klar steuern, wenn Sie ein Cross-Entwickler sind!
Osirisgothra

20

__inline, __inline__Und __forceinlinesind alle Implementierung spezifisch. Aufgrund des doppelten Unterstrichs sind alle Bezeichner für die Implementierung reserviert und sollten daher nicht mit den in Anwendungen verwendeten Bezeichnern in Konflikt stehen.

inline ist das einzige C ++ - Schlüsselwort.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.