inline 函数 在c 中是为了解决 有一些小而且频繁调用的 函数儿设计的。 这样做的目的是为了较少 function call 的调用 减少。 函数调用会在栈区 申请空间 调用完成后 释放空间。 如果平凡调用函数会加大cpu 的 负载。所以应用inline 函数就可以解决 这个问题。提高效率。
那么inline 函数的展开和define 展开有什么不同。
define 的展开在预编译阶段, -E 而 inline 函数在编译阶段展开 -c
define 无论 gcc -O 优化又没有开 都会执行展开。 而 inline 函数不一定 在 如下图。
![](https://i-blog.csdnimg.cn/blog_migrate/d7b476e6efc1e96cb24607d3ebd2aef4.jpeg)
define 不检查 参数类型 而 inline 是要检查参数类型的。
所以综合来讲:
在 C语言程序开发中,建议把那些对时间要求比较高,且C语言代码长度比较短的函数定义为 inline 函数,这么做常常可以提升程序的效率。在默认的 -O0 编译优化项不能确保 inline 一定起作用,但是可以添加添加 __attribute__((always_inline))强制编译器对 inline 函数做相应的处理。因为 inline 函数会将自己展开,所以编译器通常不会再为 inline 生成汇编代码,不过,如果是通过函数指针的形式调用 inline 函数,编译器为了获得 inline 函数的地址,仍然会为其生成汇编代码的。