文章目录
前言
当我们调用函数时,是有很多消耗的。其中最大的销毁就是为函数开辟空间 - 函数栈帧。
如果我们有一个函数,很短,而且要调用很多次,比如Swap()。它所造成消耗就比较大,那有没有一种方式来减少消耗?内联函数可以帮我们解决这个问题。
一、宏函数
其实在没有引入内联函数前,已经有一种方式可以解决这个问题了,即宏函数。
既然宏函数可以解决,那为什么还要引入内联函数呢?
因为宏函数无法调用,内联函数可以解决这个问题。
二、内联函数
通过汇编代码可以看到它们的区别
但内联函数并不是我们想要就要的,inline关键字对编译器来说只是建议,而不是强制要求。
因为,通过上面的介绍,我们知道内联函数适合以下几种情况
- 函数体比较短,能在调用点展开且展开后代码不会过于冗长。
- 函数被频繁调用,以提高执行效率。
- 函数不使用递归、循环、switch 等流程控制语句。
如果你的函数体很长,调用频繁,使用了递归,那此时它如果作为内联函数,编译器拒绝你的建议。
.
三、内联函数的易错点
c和c++需要经过以下过程才能生成可执行程序。
具体过程如下:
而内联函数是不会进入符号表的,因为它不需要去链接,它是直接展开在调用的地方。
如果你将内联函数的声明和定义放在了不同的文件中,则会出现链接错误。