目录

什么是内联函数(Inline Function)

如何将函数编写为内联函数(how to make function inline)

例:

为什么使用内联函数(Why to use inline function)

结论:

特殊规则

1.编译器可能不接受内联提议

2.内联函数的定义和声明不可分离于不同文件

结语


什么是内联函数(Inline Function)

内联函数是给编译器的提议,在编译成汇编代码时,直接将函数的代码语句在调用处展开,用于优化程序的运行效率。若函数体代码过长或因其他原因不适合内联,编译器可能不接受内联提议,按照普通的函数规则编译。

如何将函数编写为内联函数(how to make function inline)

在函数声明或者定义前加上inline即可。

例:

//不是内联函数
int add1(int x, int y) {return x + y;
}
//内联函数
inline int add2(int x, int y) {return x + y;
}
//内联函数
int add3(int x, int y);
inline int add3(int x, int y){return x + y;
}
//内联函数
inline int add4(int x, int y);
int add4(int x, int y){return x + y;
}
//内联函数
inline int add5(int x, int y);
inline int add5(int x, int y){return x + y;
}

为什么使用内联函数(Why to use inline function

例有代码如下:

#include<stdio.h>
int add1(int x, int y) {return x + y;
}
inline int add2(int x, int y) {return x + y;
}
int main() {printf("add1::%d\n", add1(1, 2));printf("add2::%d\n", add2(1, 2));return 0;
}

add1普通的函数,add2 为内联函数。这段代码的运行结果为:

那add1和add2他们的区别是什么呢?

在调试时转到反汇编:

结论:

故当一个函数同时满足:

1.需要被反复调用

2.函数体本身简短

我们可以考虑将它编写为内联函数,以节省开辟栈帧的开销,优化运行效率。

相反,若函数体本身较长,或者调用次数很少,那么这种空间换时间的操作就显得没有必要了。

特殊规则

1.编译器可能不接受内联提议

前面提到过内联只是给编译器的提议,若编译器判断当前函数不适合内联(如包含递归,函数体过长等等),便会将它当成普通的函数进行编译。

例子:

#include<stdio.h>
inline int add3(int x, int y) {int a = 0;a++;a++;a++;a++;a++;a++;a++;a++;a++;a++;a++;a++;a++;a++;a++;a++;a++;return x + y;
}
int main() {printf("add3::%d\n", add3(1, 2));return 0;
}

反汇编:

2.内联函数的定义和声明不可分离于不同文件

内联函数的声明和定义不能分离在不同的文件,会导致链接错误,但是以下两种情况除外:

1.调用内联函数的函数与内联函数,它们的定义在同一个文件;
2.编译器没有选择将代码展开(如代码长的情况);

总之将内联函数的定义声明分离时及其危险的,一般将内联函数的定义和声明都放在同一个源文件或者头文件中,以防止出错。

错误示范

正确示范:

//内联函数
inline int add2(int x, int y) {return x + y;
}
//内联函数
int add3(int x, int y);
inline int add3(int x, int y){return x + y;
}
//内联函数
inline int add4(int x, int y);
int add4(int x, int y){return x + y;
}
//内联函数
inline int add5(int x, int y);
inline int add5(int x, int y){return x + y;
}

结语

内联函数时C++常用的提升运行效率的手段,学着在日常代码中使用能更好的掌握。

笔者希望能得到你的支持,如果这篇文章有帮助到你,请点赞收藏支持!

评论区欢迎留言.

内联函数(Inline Function )相关推荐

  1. C++内联函数(inline function)

    c++从c中继承的一个重要特征就是效率.假如c++的效率明显低于c的效率,那么就会有很大的一批程序员不去使用c++了. 在c中我们经常把一些短并且执行频繁的计算写成宏,而不是函数,这样做的理由是为了执 ...

  2. 内联函数inline

    结论在文章末尾处! 在C++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数. 内联函数的处理方式是在函数的调用点直接代码展开.在计算机系 ...

  3. C++中的内联函数inline

    1.Cpp中的内联函数 内联函数是通常与类一起使用.如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方.对内联函数进行任何修改,都需要重新编译函数的所有客户端,因 ...

  4. C++中的内联函数inline总结

    C++中的内联函数inline总结 标签: c++编译器vector编程汇编windows 2011-08-26 21:46 13982人阅读 评论(8) 收藏 举报 分类: c/c++进行时(28) ...

  5. ios内联函数 inline

    ios内联函数 inline 缘由 由于在学习使用UIScrollVew开发的过程中,碰到下面这个属性(设置内边距): @property(nonatomic) UIEdgeInsets scroll ...

  6. [C++] 内联函数inline 以及 auto关键字 -- C++入门(4)

    本篇文章主要包括内联函数和auto关键字.其中,内敛函数包括概念,特性等:auto关键字的使用规则,使用场景等. 目录 1.内敛函数 1.1问题引入: 1.2内联函数的概念 1.3内敛函数的特性 2. ...

  7. c语言什么是内联函数,C语言中内联函数inline的使用方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 来源一:比特网 来源二:东方锐智 在C++中,为了解决一些频繁调用的小涵数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联涵 ...

  8. C++ | 内联函数 inline

    什么是内联函数? 在函数说明之前冠以关键字"inline",该函数就被声明为内联函数,又称为内置函数 内联函数的作用? 消除函数调用时的系统开销,提高运行速度. 应用注意事项 1. ...

  9. ios 内联函数 inline ---分解LFLiveKit

    /*内联函数:用 inline 关键字修饰的函数.内联函数不是在函数调用时发生控制转移,类似于<宏>在编译时将函数体替换每一个调用的代码位置.相较于普通函数:1.普通函数(没有inline ...

最新文章

  1. docker 退出mysql_Docker mysql即时退出
  2. 分组表管理之获取用户组表列表数据
  3. 建堆 java_堆排序就这么简单
  4. Windows性能调优: Perfomn.exe 和Perfmon /res
  5. 使用vSphere Host Update Utility 4.0升级ESX 3到4.0版本
  6. css不换行属性_那些不常见,但却非常实用的 css 属性
  7. c语言访问oc变量,OC中的方法调用流程
  8. 谁说贾跃亭不还钱?人家已偿还超30亿美元的国内债务
  9. large_margin
  10. CTA策略02_boll
  11. 浙江省智慧城市建设改变百姓生活
  12. java兔子问题流程图_求龟兔赛跑的流程图 高手进来瞧瞧啊
  13. 图片格式转换 png,jpg,gif等格式 的python小程序
  14. 地对地导弹地对地导弹地对地导弹
  15. 每月更新的Mac软件序列号查询小机器人KCNScrew Pack
  16. java毕业设计二手图书回收销售网站Mybatis+系统+数据库+调试部署
  17. 【Vivado那些事儿】Vivado 增量综合流程
  18. 读《终身成长》知 我命由我不由天 馁
  19. UE4蓝图 传送带效果
  20. 营销策划方案示范文本

热门文章

  1. ssm毕设项目校内考研吧hd450(java+VUE+Mybatis+Maven+Mysql+sprnig)
  2. 重聚--SDUTACM十周年庆典专场赛 (部分题解)
  3. 牛牛的数列(最长连续上升子序)
  4. J1900安装ContOS7 U盘引导
  5. ASP.NET WebAPI开发实例
  6. Python中秋赏月专用代码【源码好又多】
  7. ORA-01722: 无效数字
  8. 如何使用cmd打开文件
  9. 深入理解VLC(一)纵观全局
  10. linux中 vim使用教程,查看行号,搜索命令