我在 .c 中定义了我的函数(没有标头声明),如下所示:
inline int func(int i) {
return i+1;
}
然后在下面的同一个文件中我使用它:
...
i = func(i);
在链接过程中,我得到了“对‘func’的未定义引用”。为什么?
The inline
C99 中的模型与大多数人想象的有点不同,特别是与 C++ 使用的模型不同
inline
只是一个提示,这样编译器就不会抱怨双重定义的符号。它不保证函数是内联的,也不保证实际上生成符号(如果需要)。要强制生成符号,您必须添加某种实例化after the inline
定义:
int func(int i);
通常你会有inline
定义在头文件中,然后包含在多个 .c 文件(编译单元)中。并且您只能在其中一个编译单元中包含上述行。您可能只会看到您遇到的问题,因为您没有对编译器运行使用优化。
所以,你的用例有inline
在 .c 文件中没有多大意义,最好使用static
为此,甚至需要额外inline
不会给你买太多东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)