青海省建设厅网站备案资料,如何将网站和域名绑定域名,互联网,企业网站设计欣赏文章目录概念使用特性原理概念
C中内联函数的出现解决了C语言宏函数的不足#xff0c;类似于宏展开#xff0c;这种在函数调用处直接嵌入函数体的函数称为内联函数#xff0c;又称内嵌函数或内置函数。
以inline修饰的函数叫做内联函数#xff0c;编译时C编译器会在调用内…
文章目录概念使用特性原理概念
C中内联函数的出现解决了C语言宏函数的不足类似于宏展开这种在函数调用处直接嵌入函数体的函数称为内联函数又称内嵌函数或内置函数。
以inline修饰的函数叫做内联函数编译时C编译器会在调用内联函数的地方展开没有函数调用建立栈帧的开销内联函数可以提升程序运行的效率。
使用
在函数的返回值前加上inline关键字即可。
#includeiostream
using namespace std;
inline int Add(int x, int y)
{return x y;
}
int main()
{int ret Add(10,20);coutretendl;return 0;
}如果在上述函数前增加inline关键字将其改成内联函数在编译期间编译器会用函数体替换函数的调用。
特性
1短小的频繁调用的函数才适合声明为内联函数。要知道inline对于编译器而言只是一个建议不是强制性的编译器有自己的判断能力。
2为什么函数体长了之后内联函数不展开
如果函数体代码比较长如递归等使用内联函数会导致代码膨胀。会导致编译后的程序存在多份相同的拷贝编译出来的可执行程序也会非常大会消耗更多的内存空间如果指向函数体代码的时间比函数调用的开销大的多那么inline效率收益会很小。
3所以inline是一种空间换时间的做法空间由于函数体代码展开编译出来的可执行程序大小/静态库,动态库/会变大
4综上内联函数的缺点可能会使目标文件变大优点少了调用开销提高程序运行效率。
5inline内联函数不建议声明和定义分离。 错误定义声明和定义分离如下
解决方法直接在头文件中定义内联函数 原理
我们通过查看程序代码的反汇编语言来了解一下inline函数的执行原理
查看方式
在release模式下查看编译器生成的汇编代码中是否存在call Add在debug模式下需要对编译器进行设置否则不会展开(因为debug模式下编译器默认不会对代码进行优化以下给出vs2013的设置方式)
先右击项目点击项目属性。 我们先来看一段普通函数f的调用过程通过查看debug下的汇编代码 内联函数的原理即底层调用方式