使用内联关键字时遇到问题。
在头文件中:
void checkContinuation() __attribute__((always_inline));
在源文件中:
void __attribute__((always_inline)) checkContinuation() { ..... }
在主文件中我调用它,但是我得到了一个编译错误,其中说
对checkContinuation()的未定义引用
我读了所有这些链接inline with external linkage& inline function linkage
而且我已经理解C ++中的内联函数具有外部链接,这意味着该函数只有一个定义必须可用,但是其他人说它必须在使用它的每个转换单元中定义。
那么正确答案是什么?我如何使用定义一次但是用户很多?
此外,标题和源文件中的内联函数属性的正确语法是什么?它和__always_inline
之间有什么区别?
答案 0 :(得分:1)
而且我已经理解C ++中的内联函数具有外部链接,这意味着该函数只有一个定义必须可用,但是其他人说它必须在每个使用它的翻译单元中定义。
内联函数可以在多个翻译单元中定义,如果所有定义都相同。
通常的方法是在头文件中定义,并在需要函数的任何地方包含它。
答案 1 :(得分:0)
C编译器不能内联函数,除非它在同一个编译单元中看到它,这意味着你在C文件本身或#include
d的头文件中定义它(其中)例如,您通常使用inline static
来确保它不会导致多个编译单元中的名称冲突。这是因为C编译器除了正在编译的编译单元之外,不能查看任何其他编译单元。
如果启用了整个程序优化,则链接器可以内联函数,但并非所有C链接程序包都支持该函数。