当前位置:   article > 正文

【博客89】考虑为你的inline函数加上static_inline 函数都加了static

inline 函数都加了static

内容: 最近空闲时间在gitchat上看了一些linux相关的课程,也学到了一些新的知识和一些新的建议。今天分享一个:为什么很多代码在inline函数定义前面加了static呢?

在gitchat上举例了一些linux内核相关的代码,这些代码在头文件中定义了内联函数,而且在定义的时候加上了static修饰它,那么为什么这样做呢?

文中给出了linux作者的解释:
在这里插入图片描述

理解内联函数: 一个内联函数,可以像宏一样使用,任何想使用这个内联函数的源文件,不必亲自再去定义一遍,直接包含这个头文件,即可像宏一样使用它。通过替换函数体,可以省去函数调用的过程,从而减少了一系列出入栈,保护现场,恢复现场的过程。但是并不是使用起来都是没有问题的,所以引出要用 static 修饰呢?因为我们使用 inline 定义的内联函数,编译器不一定会内联展开,这个在一些编程书籍有提到过,而且我之前也有写过博客讲过不会被内联的情况。

比如下面的情况:
带循环的,带递归调用的函数进行内联,编译器不一定同意哦!而是要将短小,调用频繁的函数进行内联。对函数指针的调用不一定会采取内联。

总结: 那么当多个文件都包含这个内联函数的定义时,编译时就有可能报重定义错误。比如inline函数在两个不同的文件中出现,也就是说一个.h被两个不同的文件包含,则会出现重名,链接失败
而使用 static 修饰,可以将这个函数的作用域局限在各自本地文件内,避免了重定义错误。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/626839
推荐阅读
相关标签
  

闽ICP备14008679号