我在.c中定义了我的函数(没有标题声明),如下所示:inline int func(int i) { return i+1;}然后在下面的同一文件中使用它:...i = func(i);在链接期间,我得到了“对'func'的未定义引用”。为什么?
3 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
inlineC99中的模型与大多数人认为的有些不同,尤其是与C ++使用的模型不同
inline这只是一个提示,使编译器不会抱怨双重定义的符号。它不能保证函数是内联的,也不能保证实际上会生成一个符号(如果需要)。要强制生成符号,您必须在定义之后添加一种实例化inline:
int func(int i);
通常,您会inline在头文件中包含定义,然后将其包含在几个.c文件(编译单元)中。而且,您只能在其中一个编译单元中包含上述行。您可能只看到您遇到的问题,因为您没有在编译器运行中使用优化。
因此,inline将.c文件包含在您的用例中没有多大意义,最好仅使用static该用例,即使额外inline使用也不会给您带来多少好处。
Smart猫小萌
TA贡献1911条经验 获得超7个赞
这是因为GCC处理内联函数的方式。GCC执行内联替换作为优化的一部分。
要消除此错误static,请在内联之前使用。static关键字强制编译器使用static关键字强制编译器采用此内联函数,从而使程序成功编译。
static inline int func(int i) {
return i+1;
}
...
i = func(i);
- 3 回答
- 0 关注
- 506 浏览
添加回答
举报
0/150
提交
取消