ZHCUAQ1F july 2015 – april 2023
编译器会根据节 3.11中提到的因素决定内联哪些函数。此外,还有一些限制可以取消函数被自动内联或基于关键字内联的资格。
如果函数符合以下条件,编译器将保留调用:
如果函数具有会给编译器带来困难情形的特性,编译器也不会内联调用:
无论其他指示如何(包括被调用函数上的 FUNC_ALWAYS_INLINE pragma 或 always_inline 属性),使用 NOINLINE pragma 注释的语句中的调用都不会被内联。
如果使用 FORCEINLINE pragma 注释的语句中的调用未因上述原因之一被取消资格,即使被调用函数具有 FUNC_CANNOT_INLINE pragma 或 cannot_inline 属性,则该调用都是被内联的。
换句话说,语句级 pragma 会覆盖函数级 pragma 或属性。如果 NOINLINE 和 FORCEINLINE 都适用于同一条语句,则首先出现的语句被使用,其余语句被忽略。