使用 IAR 编译器在函数原型上使用“#pragma inline”是否足够?

问题描述 投票:0回答:2

我自己没有使用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 中工作吗?

c pragma iar
2个回答
3
投票

是的,这会起作用。如果您在函数原型上应用

foo()
,编译器将识别出
#pragma inline=forced
是强制内联函数。


0
投票

#pragma inline=forced
是否实际上导致函数被内联也可能取决于所选的优化级别。例如,ARM 的 IAR C/C++ 编译器仅在优化级别High执行函数内联,仅在Medium(及以上)级别执行强制内联:

内联通常仅在高优化级别上执行。 指定

#pragma inline=forced
也将在中等优化级别上启用函数内联。

© www.soinside.com 2019 - 2024. All rights reserved.