C++的内联函数和宏的关系

内联函数

前言

因为在函数调用中,会有资源的消耗,比如说函数调用是要创建栈帧的,假设一个函数要被频繁的调用,那就会造成资源消耗很大,为了解决这一的问题,C++就有了内联函数这个概念,它可以让程序对资源的消耗没有大,提高程序执行时的效率。
对于C语言来说,为了解决上述的问题,就是使用宏来解决。

1、概念

被关键字inline修饰的函数就是内联函数编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。

inline add(int x,int y)
{
	return x+y;
}

2、内联函数注意点

1、内联函数的调用不适合用于代码段很长的函数。
2、内联函数的调用也不适合用于循环和递归的情况。
假设一个20行的函数需要调用一百次,在不是内联函数调用的情况下,只需要100+20条代码,因为函数调用的时候会call函数的地址,而不是展开这个函数;如果是内联函数调用的情况下,那么在一百次调用的地方都会展开,那就是100*20条代码,这样就会导致可编译程序变的很大。

3、内联函数的特点

1、在VSdebug下内联函数是不会展开的,而是和普通函数一样,因为在debug下,程序要支持被调,所以只有在release下才内敛函数才会展开。
2、编译器会自动去识别,这个函数能否成为内联函数,只要是:
(1)代码不是过长(约10行左右,取决于编译器)
(2)不是递归函数,函数使用的使用不频繁
上述两种情况都不满足的话编译器就会自动变成内联函数,如果都不符合编译器就会限制它成为内联函数
3、 inline不建议声明和定义分离(因为内联函数没有地址,那么定义与声明分离后,就call不到内联函数的地址,不来也不需要call),分离会导致链接错误。因为inline被展开,就没有函数地址
了,链接的时候就会找不到。
在这里插入图片描述

4、宏的优缺点

宏的优点:
(1)复用的强度高
(2)提高性能
宏的缺点
(1)不容易被调试,因为在预处理阶段,宏就被替换了
(2)可读性差,容易误用
(3)没有类型安全检测
所以在C++中函数代码量小的会用内联函数替代宏宏函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值