目录

什么是内联函数(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. etcd 笔记(07)— 键值对读写操作过程
  2. IDC报告:欧洲区块链支出8亿美元,排在首位
  3. Java学习之for语句
  4. 使用git将本地项目上传到github
  5. 机器学习第4天:线性回归及梯度下降
  6. onkeyup,onkeydown和onkeypress
  7. 用BenchmarkDotNet看Property
  8. Java, C#, Swift语法对比速查表
  9. 201312-1 出现次数最多的数
  10. 设置linearlayout最大高度_ICEM CFD网格设置参数意义
  11. Jmeter - 服务器性能检测
  12. ElasticSearch - 聚合 aggs
  13. Objective-C写出Json文件(可作配置文件)
  14. aic值检验 p值_qRT-PCR差异分析及P值计算
  15. 电子书PDF文件的压缩实践
  16. tinyMediaManager 群晖 docker
  17. UML面向对象分析与建模
  18. 各类计算机接口标志,电脑usb3 USB4接口标准标识被英特尔重新规范
  19. 【原创】【学习笔记5】关于console相关修改
  20. 从「富爸爸现金流」游戏中总结的理财四条

热门文章

  1. web前端页面性能优化小结
  2. python怎么安装pymysql_python安装PyMySQL
  3. 毕设路线—pytorch环境下的深度学习的高光谱图像分类问题
  4. scipy.optimize.linprog函数参数最全详解
  5. leetcode 41.缺失的第一个整数
  6. python字符串拼接带空格_使用Python连接字符串和空格
  7. 电商项目-商品详情页的实现
  8. Linux下启动、测试、关闭Redis服务
  9. tensorflow2.0 CNN fashion MNIST图像分类
  10. 内聚和耦合的简介和强度