【问题标题】:C inline functions [duplicate]C内联函数[重复]
【发布时间】:2019-12-25 22:13:02
【问题描述】:

据我所知,C 中的 inline 函数在单个翻译单元中使用时与 C++ 中的函数几乎相同,在这种情况下无需深入研究 extern inline 的困难。但是,包含三个文件的以下程序似乎无法在 C 中编译,我正在努力找出原因。

f.h

int f();
inline int g();

f.c

#include "f.h"

inline int g() {
    return 5;
}

int f() {
    return 3 + g();
}

main.c

#include "f.h"
#include <stdio.h>

int main() {
    printf("%d", f());
    return 0;
}

链接器

告诉有一个g的未定义引用。但是,由于g 仅在 f.c 文件中使用,我无法确定问题的确切位置。

【问题讨论】:

  • 您需要extern inline int g(); 在一个翻译单元中,在 ISO C 中
  • 这将有助于显示您的构建命令,例如因为 GNU C 的行为与 ISO C 不同

标签: c linker-errors inline-functions


【解决方案1】:

来自 C 标准(6.7.4 函数说明符)

7,,,对于带有外部链接的函数,有以下限制 apply: 如果一个函数是用内联函数说明符声明的, 那么它也应该在同一个翻译单元中定义

在您的项目中,函数 g 在翻译单元中用 main 声明。

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 2011-09-18
    • 2016-03-12
    • 2017-01-05
    • 2013-08-28
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    相关资源
    最近更新 更多