【发布时间】:2014-06-18 15:32:31
【问题描述】:
我有一个文件funcs.h,其中有函数声明:
inline void some_func( void ) __attribute__((always_inline));
然后我有一个文件funcs.c,其中有函数的实现:
inline void some_func( void ) { … }
然后在我的主文件main.c 我#include funcs.h 并尝试在代码中的某处使用some_func()。然而,当我编译我的程序并查看二进制文件时,该函数似乎被编译为一个常规的单独函数,并且像任何其他常规函数一样被调用,而不是作为内联函数嵌入。
为什么会发生这种情况,有没有办法强制实际内联? (当然,只使用#define 宏而不是函数的选项除外。)
【问题讨论】:
-
编译器应该如何内联编译后找到的定义?
-
您必须打开链接时优化(
-flto开关)。 -
@ghostofstandardspast 不是编译器,而是链接器。
-
@user3477950,我想这是一个很好的观点。我记得微软说过链接器可以做的优化。
-
@user3477950 简单的测试表明,即使
a+b函数也没有与 gcc 4.8 和-flto内联。此外,使用此属性会产生编译错误,因为编译器肯定知道它不能内联,而程序员坚持认为它应该。
标签: c gcc inline-functions