c语言函数声明中,static inline和extern inline的区别

“extern”关键字对于普通函数没有作用

extern在修饰变量和函数声明时的作用是表示:这个东西不在当前的编译单元中,只需要它的声明即可。链接时,链接器会去其它编译单元以及其它库中寻找它的定义。
而函数默认就是extern的。所以当你看到像下面这样的代码时,很可能写代码的人不知道自己在干什么:

// useless “extern”
extern void function();

“extern”和“static”能影响编译器对内联函数的处理

但是对于内联函数来说,情况就有了一些变化:
inline关键字是对编译器的内联建议。编译器会根据实际情况决定是否内联当前函数是否内联。
当一个内联函数同时也是extern函数时,如果编译器决定内联这个函数,那么没什么问题;如果编译器决定不内联这个函数,它就会给这个函数创建常规且唯一的函数实现,并且所有其他不内联的调用点都将调用这个实现。
当一个内联函数同时也是static函数时,如果编译器决定内联这个函数,那么同样也是没什么问题的;如果编译器决定不内联这个函数,那么在当前的编译单元里,这个函数就跟static函数一样,就会创建一个当前编译单元唯一的函数实现,所有当前编译单元的函数调用,都会指向这个实现。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值