我发现许多在线资源都在讨论如何inline
(甚至__attribute__((always_inline))
或__forceinline
)不强制编译器(例如 gcc 或 VisualC++)内联函数。但是什么时候不强制执行内联呢?有玩具的例子吗?
也许不一定是同一个问题,inline
两个不同cpp文件中包含的函数何时会在链接期间产生问题?即,生成重复的符号?
这是一个具体的沙箱,用于尝试破坏编译器内联并生成重复符号:
在myinline.h
:
inline int myinline()
{
// code that cannot be inlined...
...
}
在aux.cpp
:
#include "myinline.h"
int aux()
{
return my_inline();
}
在main.cpp
:
#include "myinline.h"
int aux();
int main()
{
return aux() + my_inline();
}
然后,例如在 gcc 的情况下,是否有一些(最小)代码myinline
在编译和链接时会导致重复符号:
g++ -o aux.o -c aux.cpp
g++ -o main.o -c main.cpp
g++ -o example aux.o main.o
?