我在 .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/