.c 文件中的 C99 内联函数

标签 c c99

我在 .c 中定义了我的函数(没有 header 声明),如下所示:

inline int func(int i) {
 return i+1;
}

然后在下面的同一个文件中我使用它:

...
i = func(i);

在链接过程中,我得到了“对‘func’的 undefined reference ”。为什么?

最佳答案

C99 中的内联 模型与大多数人想象的有点不同,特别是与 C++ 使用的模型不同

inline 只是一个提示,这样编译器就不会提示双重定义的符号。它不保证函数是内联的,也不保证实际上生成符号(如果需要)。要强制生成符号,您必须在内联定义之后添加一种实例化:

int func(int i);

通常,您会在头文件中包含内联 定义,然后将其包含在多个 .c 文件(编译单元)中。并且您只能在其中一个编译单元中包含上述行。您可能只会看到所遇到的问题,因为您没有对编译器运行使用优化。

因此,在 .c 文件中使用 inline 的用例没有多大意义,最好使用 static 来实现这一点,即使是额外的 内联不会给你带来太多好处。

关于.c 文件中的 C99 内联函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387932/

相关文章:

c++ - Qt 5 和 QProcess 使用信号/槽 readyRead 重定向标准输出

c - 在 C 中使用影子支持

c - 操作在 C 中可能未定义

C - fork 和 sleep 函数出现意外结果

Code::Blocks 中单个文件的 c99 模式

基本函数的 C 编译错误

c - C99 中是否有固定大小的 float 和 double 类型?

c - &((struct name *)NULL -> b) 会导致 C11 中的未定义行为吗?

c - C预处理器语句是C语言的一部分吗?

c - 有没有办法检查是否在堆栈/堆上创建了可变长度数组?