views:

512

answers:

3

What are the differences between these four inline (key)words?

inline, __inline, __inline__, __forceinline.

+7  A: 

__inline, __inline__ and __forceinline are all implementation specific. Because of the double underscore they are all identifiers reserved for the implementation so shouldn't conflict with identifiers used in applications.

inline is the only C++ keyword.

Charles Bailey
+1 for mentioning the meaning of double underscore
Martin York
+19  A: 

inline is the keyword, in C++ and C99.

__inline is a vendor-specific keyword (e.g. MSVC) for inline function in C, since C89 doesn't have it.

__inline__ is similar to __inline but is from another set of compilers.

__forceinline is another MSVC-specific keyword, which will apply more force to inline the function than the __inline hint (e.g. inline even if it result in worse code).

There's also __attribute__((always_inline)) in GCC.

KennyTM
__forceinline is a more forceful hint than inline, but still just a hint (http://msdn.microsoft.com/en-us/library/z8y1yy88%28VS.80%29.aspx).
MadKeithV
@MadKeithV: Nice link. I learned a lot reading it and the links it links to. Thanks!
Xavier Ho
Maybe consider changing the "Microsoft-specific" language to "vendor-specific" or something like that. Many of the embedded cross-development toolsets I use also support __inline and __forceinline. The world is bigger than MSOFT ;-)
Dan
+3  A: 

For the Visual Studio compiler it means:

  • inline - suggestion to the compiler to inline your code

  • __forceinline - overrides the builtin compiler optimization and generates inline code

For more details see: http://msdn.microsoft.com/en-us/library/z8y1yy88%28VS.71%29.aspx

Holger Kretzschmar