网站首页 > 文章精选 正文
我们在嵌入式开发中,用static声明的变量,会有两方面的特征:
1、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候,还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
2、变量用static定义后会告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。
static的应用场景
关键字static主要有以下两个应用场景:
1、若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度。
2、若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度。
实际上我们可以发现,定义static变量的好处,除了降低模块间的耦合度外,也保证了变量的密封性,而且不占用堆栈空间。不会出现因静态全局变量过大,而导致堆栈溢出的情况。
但是,定义static变量也会存在一个问题。
不可重入函数
我们在设计和使用访问动态全局变量、静态全局变量和静态局部变量的函数时,需要考虑重入问题。比如,
unsigned int sum_int( unsigned int base )
{
unsigned int index;
static unsigned int sum = 0; // 注意,是static类型的。
for (index = 1; index <= base; index++)
{
sum += index;
}
return sum;
}
这个函数就是不可重入的。所谓的函数是可重入的,也可以说是可预测的,即只要输入数据相同就应产生相同的输出。这个函数之所以是不可预测的,就是因为函数中使用了static变量,因为static变量的特征,这样的函数被称为:带“内部存储器”功能的的函数。因此如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量。
将上面的函数修改为可重入的函数很简单,只要将声明sum变量中的static关键字去掉,变量sum即变为一个auto 类型(auto是默认的,不用声明)的变量,函数即变为一个可重入的函数。
当然,有些时候,在函数中是必须要使用static变量的,比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值。若为auto类型,则返回为错误指针。
猜你喜欢
- 2025-05-05 一个后勾腿动作,有效疏通血管,改善下肢发麻,促进全身燃脂
- 2025-05-05 大型调相机起动及并网研究(什么是调相机,与发电机区别)
- 2025-05-05 你们都是托:动态对比度其实是骗你的
- 2025-05-05 最容易被忽视的身体素质——柔韧性
- 2025-05-05 减压阀能减静压吗?(减压阀能减静压吗视频)
- 2025-05-05 第6讲-结构设计作用(结构设计的作用)
- 2025-05-05 性能测试必懂的内存知识点(性能测试内存占用一般多少算合格)
- 2025-05-05 不谈源码,聊聊位运算的实际应用(位运算的含义和使用)
- 2025-05-05 元王CAE仿真系列之疲劳分析篇(疲劳仿真软件)
- 2025-05-05 静态混合器在化工中的作用(静态混合器结构)
- 05-05MyBatis的三种分页方式,你学废了吗?
- 05-05如何写一个简单的分页(最简单的分页)
- 05-05详解如何使用Spring Data JPA进行数据的分页与排序
- 05-05手速太快引发分页翻车?前端竞态陷阱揭秘
- 05-05前端分页机制的具体实现(分页前端需要做什么)
- 05-05一个后勾腿动作,有效疏通血管,改善下肢发麻,促进全身燃脂
- 05-05大型调相机起动及并网研究(什么是调相机,与发电机区别)
- 05-05你们都是托:动态对比度其实是骗你的
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)