内联函数和宏函数

内联函数和普通函数的区别:
普通函数调用时是生成调用指令跳转(),然后当代码执行到调用位置时,跳转到函数所在的代码段中执行
而 内联函数就是直接把函数编译好的二进制指令复制到函数的调用位置

优点:提高了程序的运行速度(没跳转没返回当然速度快了),但这样会导致可执行文件增大(冗余),也就是牺牲空间来换取时间

显式内联:在函数前 inline(C语言C99标准也支持)
隐式内联:结构、类中内部直接定义的成员函数,则该类型会被优化成内联函数

宏函数在调用时会把函数体直接替换到调用为止,与内联函数一样也是使用空间来换取时间

所以这时候就需要看清宏函数与内联的区别了,也可以说他们的优缺点:
1、宏函数不是真正的函数,只是代码替换,不会有参数压栈、出栈以及返回值,也不会检查参数类型,因此所有类型都可以使用,但这样会有安全隐患,就是二义性(比如说你把x+y定义成S #define S x+y,题目是x*(x+y),而使用宏函数就可能写成xS,那样结果就是xx+y,这就是二义性)
2、内联函数时真正的函数,被调用时会进行传参,会进行压栈、出栈,可以有返回值,并严格检查参数类型,但这样就不能通用,如果想被多种类型调用需要重载

宏函数是很方便,而且如果小心一点的话就很好用
所以,什么时候用内联函数呢:
频繁调用的简单函数适合作为内联函数,因为内联函数会造成可执行函数的变大,并增加内存开销
调用少的复杂函数,内联后并不显著提高性能,比起牺牲的空间太亏了
还有递归特性和动态绑定特性的函数无法实施内联,因此编译器会忽略声明部分的inline关键字

然后给个例子

在这里插入图片描述
C++类中有声明且定义的函数就是内联函数(隐式),类内声明类外定义且有inline的是内联函数(显式)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值