标题和源文件中的内联函数

时间:2015-10-16 13:29:06

标签: c++ gcc inline

使用内联关键字时遇到问题。

在头文件中:

void checkContinuation() __attribute__((always_inline));

在源文件中:

void __attribute__((always_inline)) checkContinuation() { ..... }

在主文件中我调用它,但是我得到了一个编译错误,其中说

  

对checkContinuation()的未定义引用

我读了所有这些链接inline with external linkage& inline function linkage

而且我已经理解C ++中的内联函数具有外部链接,这意味着该函数只有一个定义必须可用,但是其他人说它必须在使用它的每个转换单元中定义。

那么正确答案是什么?我如何使用定义一次但是用户很多?

此外,标题和源文件中的内联函数属性的正确语法是什么?它和__always_inline之间有什么区别?

2 个答案:

答案 0 :(得分:1)

  

而且我已经理解C ++中的内联函数具有外部链接,这意味着该函数只有一个定义必须可用,但是其他人说它必须在每个使用它的翻译单元中定义。

内联函数可以在多个翻译单元中定义,如果所有定义都相同。

通常的方法是在头文件中定义,并在需要函数的任何地方包含它。

答案 1 :(得分:0)

C编译器不能内联函数,除非它在同一个编译单元中看到它,这意味着你在C文件本身或#include d的头文件中定义它(其中)例如,您通常使用inline static来确保它不会导致多个编译单元中的名称冲突。这是因为C编译器除了正在编译的编译单元之外,不能查看任何其他编译单元。

如果启用了整个程序优化,则链接器可以内联函数,但并非所有C链接程序包都支持该函数。