inline

inline函数

1. 实现在 .h 中,未标记inline
每一个包含该头文件的源文件都将得到一份关于该函数的定义,链接器会报函数重定义错误
2. 实现在 .h 中,且标记inline
每一个包含该头文件的源文件都将得到一份关于该函数的定义,但是链接器不会报错
3. 实现在 .c 中,未标记inline
该函数可以被连接到其他编译单元中
4. 实现在 .c 中,且标记inline
该函数对其他编译单元不可见(类似于static),其他源文件不能链接该函数库
当连接到该库的时候会出现 undefined reference to 错误
原理

 - 编译器在编译一个inline函数时,需要知道其完整定义,如果编译器在本编译单元找不到inline函数定义就会报错。
 - inline函数的调用不涉及到函数的调用,所以不需要链接器参与工作,所以也就不会去其他编译单元查找函数定义。
 - 同理。将类的成员函数的实现放在头文件中不会出现重定义错误,是因为在类中定义成员函数默认为inline函数。
建议
1. 在多个 .c 中被调用(类似于extern)
- 将函数的声明放在 .h 中,无需标记 inline- 将函数的实现放在 .h 中,并且标记 inline
2. 只在本地一个 .c 中被调用(类似于static)
- 将函数的声明放在 .c 中,无需标记 inline- 将函数的实现放在 .c 中,并且标记 inline

inline是一种用于实现的关键字,而不是一种用于声明的关键字。所以声明时,无需标记为inline。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值