【发布时间】:2019-07-05 17:39:14
【问题描述】:
我想知道为什么函数 foobar() 没有被 gcc/clang 内联。即使使用-O3 也不会执行内联。我本来希望 gcc 足够聪明地这样做。
如果我将inline 关键字添加到函数中,则会执行内联。但是,我认为手动指定 inline 关键字有点过时了。
我还尝试在本地机器上使用 gcc-8 编译此示例,但结果相同。
#include <cstdio>
int foobar()
{
return 0;
}
int main()
{
printf("%d", foobar());
}
【问题讨论】:
-
调用被内联在你提供的链接中,main 中没有调用 foobar。
-
请注意该函数存在(内联调用旁边),因为它可能从另一个翻译单元链接(即使在这种情况下没有其他翻译单元)。
-
我认为您将函数调用与函数定义混淆了。
-
inline的原义同时被移动。由于编译器可以最好地确定内联的价值,因此不再需要提示。inline现在用于标记重复的外部定义(否则会导致链接错误),例如标头中的变量或函数定义(必须是inlined)。 (inline) -
@Scheff:非常感谢。事实上,我忽略了这个事实。我刚刚看到该函数仍然存在,但实际上它从未被调用过。
标签: c++ optimization inline