gcc inline理解

本文详细探讨了GCC编译器在处理inline、static inline和extern inline函数时的不同行为。针对Ubuntu 16.04.2 LTS环境,测试结果显示:inline函数在同一个文件中建议内联,但会生成独立的汇编代码供外部调用;static inline函数不生成独立代码,仅在本地调用时内联,允许与其他函数同名;extern inline函数不生成汇编代码,其行为依赖于外部是否有同名函数定义,可能导致重定义错误。
摘要由CSDN通过智能技术生成

只测试过Ubuntu gcc,其他未测试。

1、inline 函数

Ubuntu 16.04.2 LTS 上gcc无法编译通过,显示undefined reference to `print',print是定义的 inline函数。

inline在gcc中实际情况是:

a.对于同一个文件来说,inline函数相对于extern函数是建议编译器内联展开;

b.编译器一定会为该inline函数生成独立汇编代码,让外部文件调用该汇编代码,而不是让外部文件内联展开;

c.inline函数是全局的,即和普通extern函数全局属性类似;

d.实际测试:当外部文件中有同名的非inline函数时,重定义错误;只定义inline函数会有undefined reference错误;

2、static inline函数

a.本地调用时建议编译器内联展开;

b.编译器一般不会为static inline函数生成独立的汇编代

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值