宏定义与内联函数的区别

宏定义

预处理器用复制宏代码的方式代替函数调用,省去了参数压栈,生成汇编语言的CALL调用,返回参数,执行return等过程,从而提高了速度

内联函数

是代码被插入到调用者代码处的函数。只适合函数体内代码简单的函数使用,不能包含复杂的结构语句(如while、switch),并且内联函数本身不能调用递归函数,此外,如果内联函数体过大,编译器会放弃内联方式,采用普通方式调用

区别

1. 宏定义是在预处理阶段进行代码替换,而内联函数是在编译阶段插入代码

2. 宏定义没有类型检查,而内联函数有类型检查

引申:内联函数与普通函数的异同?

相同:内联函数的参数传递机制与普通函数相同,但是编译器会在每处调用内联函数的地方将内联函数的内容展开,这样既避免了函数调用的开销,又没有宏机制的缺陷

不同:在于其内部的实现方面

  • 普通函数:在被调用时,系统首先要跳跃到该函数的入口地址,执行函数体,执行完成后,再返回到函数调用的地方,函数时钟只有一个复制
  • 内联函数:不需要进行一个寻址过程,当执行到内联函数时,次函数展开,如果在N处调用了此内联函数,则次函数就会有N个代码段的复制


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值