我正在尝试在CPP文件中定义一个在头文件中向前声明的函数。我想知道执行此操作的正确方法,因为我尝试过的所有内容都可以编译并运行,并且我的分析技能不足以调查功能是否真正内联。
这就是我想要做的
/// Source.h
void inlined_func(); // what specifiers should I put here?
// I was thinking about doing both `extern` and `__forceinline`
/// Source.cpp
__forceinline void inlined_func()
{
std::cout << "we're in the inlined func" << std::endl;
}
答案 0 :(得分:1)
默认情况下声明为__forceinline
的函数将获得内部链接(名称只能在当前翻译单元中引用),就好像声明为static
一样。如果尝试在另一个翻译单元中使用它,则会收到链接器错误LNK2001 unresolved external symbol ...
。要强制使用外部链接,以便可以在其他翻译单元中引用它,请使用extern
关键字。
foo.h
void foo();
foo.cpp
#include <foo.h>
extern __forceinline void foo() {
/*...*/
}
main.cpp
#include <foo.h>
int main() {
foo();
}