① 概念引入
多用于复用性强的函数(代码量较少具有特定功能的函数)
坏处:让你的代码上下文很臃肿(冗余)
好处:
在复用性强的函数调用的时候直接插入函数代码段而不是进行函数跳转(编译器弄的),减少性能消耗提高运行效率。
减少函数调用开销:函数调用涉及压栈、跳转等操作,会产生额外的(CPU性能+内存)开销。通过内联函数,避免了这些开销,直接将函数体插入到调用处,提高程序的执行效率。
inline int Fun();
inline int Fun()
{
printf("打开一个文件");
xxx
}
int main()
{
Fun();
Fun();
Fun();
return 0;
}
② 内联函数的使用
项目框架确定,相对系统平台(编译平台)的框架比较精简(微型处理器MCU---项目框架)--内联函数
系统源码中也有出现过。服务器等比较大的项目框架
有没有内联主要看编译器环境的选择也要看编译器支不支持
建议内联:建议编译器在编译的时候启动内联变量
inline int fun();
强制内联:也是需要看编译器支不支持,__attribute__((always_inline)) 是编译器提供的,并不是C语言的语法提供
inline int __attribute__((always_inline)) fun();
或者
__attribute__((al_inlineways)) inline int fun(); //让编译器强制内联
__attribute__((always_inline)) 是 GCC 特有的语法,并非标准 C 的一部分。因此,
使用这种方式时需要确保你的项目使用的编译器支持这个特性。
内联功能主要由编译器决定:
根据不同编译版本:
可以由多种写法:
定义的时候写 :
如果编译器版本不支持定义和声明都写,我们选择这一种,因为编译对于内联语法,在调用内联的时候需要去识别内联函数是否再再当前函数调用的.c里面
声明的时候写
声明和定义的时候写:提高可读性
③ inline仅是一个对编译器的建议
inline 函数仅仅是一个对编译器的建议,所以最后能否真正内联,看编译器的意思,它如果认为函数不复杂,能在调用点展开,就会真正内联,并不是说声明了内联就会内联,声明内联只是一个“建议“而已。
inline 的使用是有所限制的,inline 只适合涵数体内代码简单的涵数使用,不能包含复杂的结构控制语句例如 while、switch,并且不能内联函数本身不能是直接递归函数(即,自己内部还调用自己的函数)。
④ 建议 inline 函数的定义放在头文件中
头文件不是用来函数声明吗?现在还要把函数的定义和封装写道头文件里面?
1)代码量少不会让头文件很臃肿
2)为内联函数要在调用点展开,所以编译器必须随处可见内联函数的定义,要不然就成了非内联函数的调用了。
所以,这要求每个调用了内联函数的文件都出现了该内联函数的定义。
解决方法就是定义在头文件中,然后#include这个头文件
⑤ 内联函数的使用理解
内联函数并不是那么好用。
只有当函数非常短小的时候它才能得到我们想要的效果。
如果函数并不是很短而且在很多地方都被调用的话,那么将会使得可执行体(编译出来的程序)的体积增大。
⑥ 内联函数的考点
Ⅰ 内联函数的作用?
Ⅱ 内联函数的优缺点?
Ⅲ 谈谈你对内联函数的理解?
优缺点,说出你的理解:默认是建议内联而已,应用场景
标签:__,头文件,函数,编译器,内联,inline
From: https://www.cnblogs.com/hhail08/p/18277497