青岛网站建设搜q.479185700,网页设计代码html个人简介,北京品牌高端网站建设公司,互动型网站成功例子文章目录一.内联函数概念二.内联函数用法三.内联函数的特性四.内联函数和宏一.内联函数概念
以inline修饰的函数叫做内联函数#xff0c;编译时C编译器会在调用内联函数的地方展开#xff0c;没有函数调用建立栈帧的开销#xff0c;内联函数提升程序运行的效率。
二.内联函…
文章目录一.内联函数概念二.内联函数用法三.内联函数的特性四.内联函数和宏一.内联函数概念
以inline修饰的函数叫做内联函数编译时C编译器会在调用内联函数的地方展开没有函数调用建立栈帧的开销内联函数提升程序运行的效率。
二.内联函数用法
inline void swap(int x, int y)//内联函数
{int tmp x;x y;y tmp;
}int main()
{int x 10;int y 20;swap(x, y);cout x y endl;return 0;
}普通函数在调用的时候会开辟函数栈帧而内联函数是直接替换在调用内联函数的地方进行展开。
在release模式下可以通过调试-右键代码-反汇编中看到效果而debug模式下需要手动设置因为debug模式下编译器默认不会对代码进行优化以下给出vs2013的设置方式
通过汇编可以发现调用swap不是通过call指令转到swap函数之后在执行而是直接将swap函数展开
三.内联函数的特性
inline是一种以空间换时间的做法如果编译器将函数当成内联函数处理在编译阶段会用函数体替换函数调用缺陷可能会使目标文件变大优势少了调用开销提高程序运行效率。(这里的空间是指可执行程序体积会变大)inline对于编译器而言只是一个建议不同编译器关于inline实现机制可能不同一般建议将函数规模较小(即函数不是很长具体没有准确的说法取决于编译器内部实现)、不是递归、且频繁调用的函数采用inline修饰否则编译器会忽略inline特性inline不建议声明和定义分离分离会导致链接错误。因为inline被展开就没有函数地址了链接就会找不到。所以这里建议不要去声明了直接在.h文件或者要用的地方直接定义就行。
四.内联函数和宏
宏的优点 1.增强代码的复用性 2.提高性能
宏的缺点 1.不方便调试 2.变量没有类型安全的检测(只是纯粹的替换) 3.在有些地方用起来繁琐容易出错 4.导致代码可读性差可维护性差
因为宏有很多缺点所以C建议 1.一般的宏常量用const,enum枚举来替换 2.简单的宏函数用内联函数去替换