我自己没有使用IAR,我自己也无法测试它(否则我不会在这里问这个问题)。
我的问题是:在函数原型上应用
#pragma inline=xxxxx
是否足够(因为可以在 gcc 中使用 __attribute__
)并在文件中的某处进行定义而无需此 #pragma
海湾合作委员会示例:
static inline int __attribute__((always_inline)) foo(int x);
/* .... */
static inline int foo(int x)
{
return x + x;
}
我希望在使用 IAR 编译器进行编译时使用
#pragma inline=...
具有相同的功能。
#pragma inline=forced
static inline int foo(int x);
/* .... */
static inline int foo(int x)
{
return x + x;
}
我的问题是:它能在 IAR 中工作吗?
是的,这会起作用。如果您在函数原型上应用
foo()
,编译器将识别出 #pragma inline=forced
是强制内联函数。
#pragma inline=forced
是否实际上导致函数被内联也可能取决于所选的优化级别。例如,ARM 的 IAR C/C++ 编译器仅在优化级别High执行函数内联,仅在Medium(及以上)级别执行强制内联:
内联通常仅在高优化级别上执行。 指定
也将在中等优化级别上启用函数内联。#pragma inline=forced