C ++外部定义内联函数

时间:2018-09-01 04:43:58

标签: c++ microsoft-visual-c++

我正在尝试在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;
}

1 个答案:

答案 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();
}