static和inline配合修饰函数

1.预先了解的知识

1.1 static

static关键字用途太多,以致于让新手模糊。不过,总结起来就有两种作用,改变生命期和限制作用域。如:

  1. 修饰inline函数:限制作用域static和inline配合修饰函数
  2. 修饰普通函数:限制作用域

用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用,隐藏的作用

  1. 修饰局部变量:改变生命期

把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。
共有两种变量存储在静态存储区:全局变量和 static 变量,存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。
拥有和全局变量的同一个特性:默认初始化为0;

  1. 修饰全局变量:限制作用域

静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
static全局变量只初使化一次,防止在其他文件单元中被引用;

1.2 inline

建议编译器对该函数进行内联,但是具体是否内联,需要看编译器

inline是c99的特性。在c99中,inline是向编译器建议,将被inline修饰的函数以内联的方式嵌入到调用这个函数的地方。而编译器会判断这样做是否合适,以此最终决定是否这么做。

参考链接

2.static和inline配合

举例:
在.h文件中发现这样一行代码

static inline void somefunction(void);
  • inline函数有点类似于宏定义,如果inline函数在两个不同的文件中出现,也就是说1个.h被两个不同的文件包含,会出现重名,链接失败.

2.1 static inline的优劣

  • static inline的优劣
    根据上面的定义可以知道,如果static inline关键字生效(因为只有编译器有最终决定权,我们只有建议权,这点在后面会细讲),static inline会以一种类似于宏定义的方式,将调用被static inline修饰的函数的语句替换为那个函数体对应的指令,但实际上只是inline的作用,static作用其实是维护代码的健壮性,

好处: 减少调用函数时的开销,如: 减少传参时可能引起的压栈出栈的开销。 减少PC跳转时对流水线的破坏。
坏处: * 代码所占体积会更大。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值