为了账号安全,请及时绑定邮箱和手机立即绑定

.c文件中的C99内联函数

.c文件中的C99内联函数

C
不负相思意 2019-11-15 16:54:47
我在.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使用也不会给您带来多少好处。


查看完整回答
反对 回复 2019-11-15
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

这是因为GCC处理内联函数的方式。GCC执行内联替换作为优化的一部分。


要消除此错误static,请在内联之前使用。static关键字强制编译器使用static关键字强制编译器采用此内联函数,从而使程序成功编译。


static inline int func(int i) {

 return i+1;

}

...

i = func(i);


查看完整回答
反对 回复 2019-11-15
  • 3 回答
  • 0 关注
  • 506 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信