ZHCU820Y September 2004 – June 2021
编译器会根据Topic Link Label3.11中提到的因素决定内联哪些函数。此外,还有一些限制可以取消函数被自动内联或基于关键字内联的资格。
如果函数符合以下条件,编译器会将调用保持原样:
如果函数具有会给编译器带来困难情形的特性,编译器也不会内联调用:
无论其他指示如何(包括被调用函数的 FUNC_ALWAYS_INLINE pragma 或 always_inline 属性),使用 NOINLINE pragma 注释的语句中的调用都不会被内联。
使用 FORCEINLINE pragma 注释的语句中的调用将始终内联,如果它没有因上述原因之一被取消资格,即使被调用函数具有 FUNC_CANNOT_INLINE pragma 或 cannot_inline 属性。
换句话说,语句级 pragma 会覆盖函数级 pragma 或属性。如果 NOINLINE 和 FORCEINLINE 都适用于同一个语句,则将使用第一个出现的语句,其余的将被忽略。