【问题标题】:Inline function in header and source file头文件和源文件中的内联函数
【发布时间】:2015-10-16 13:29:06
【问题描述】:

我在使用 inline 关键字时遇到问题。

在头文件中:

void checkContinuation() __attribute__((always_inline));

在源文件中:

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

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

对 checkContinuation() 的未定义引用

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

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

那么正确的答案是什么?如何使用定义一次但经常使用它?

另外,头文件和源文件中内联函数属性的正确语法是什么?和__always_inline有什么区别?

【问题讨论】:

    标签: c++ gcc inline


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-05
        相关资源
        最近更新 更多