内联还是__inline还是__inline__还是__forceinline?


74

这四个内联(关键字)词有什么区别?

inline__inline__inline____forceinline


您还应该询问社区有关内联用法的建议。
马丁·约克

Answers:


87

inline所述关键字,在C ++和C99。

__inline是C中内联函数的特定于供应商的关键字(例如MSVC),因为C89没有它。

__inline____inline另一套编译器相似,但来自另一套编译器。

__forceinline是另一个特定于供应商的(主要是MSVC)关键字,与__inline提示相比,它将对内联函数施加更大的作用力(例如,内联,即使导致更糟糕的代码)。

__attribute__((always_inline))在GCC和clang中也有。


12
__forceinline比内联更具强制性,但仍只是一个提示(msdn.microsoft.com/en-us/library/z8y1yy88%28VS.80%29.aspx)。
Joris Timmermans,2010年

也许考虑将“ Microsoft特定”语言更改为“供应商特定”或类似的语言。我使用的许多嵌入式交叉开发工具集还支持__inline和__forceinline。世界比MSOFT还大;-)

__forceinline所做的全部工作就是跳过对内联和“强制”进行开销的开销和收益因素的分析。除非您真的需要内联,否则最好还是在使用C ++时坚持使用内联,或者在使用C时坚持使用__inline。据我所知,__ forceinline源自MSVC,但它被使用和定义了其他地方,尤其是GCC(如在属性表达式中。但是,当然,必须使用内联标头或标志才能使用它。某些IDE默认情况下将禁用此功能,另一些IDE默认情况下将其启用。如果您是跨开发人员,我会避开!
osirisgothra 2014年

20

__inline__inline__并且__forceinline都是针对具体实现的。由于双下划线,它们都是为实现保留的标识符,因此不应与应用程序中使用的标识符冲突。

inline 是唯一的C ++关键字。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.