3767|7

22

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于全局变量 [复制链接]

有时候不得不用全局变量,比如说要与中断服务程序通信。
与其写成这样:   int  timer = 0;
不如写成这样:
inline  int* Timer()
{
    static int timer = 0;
    return (&timer );
}

两种方法产生的汇编代码是一样的,但后者避免了全局变量,应该有一定的参考价值。
此帖出自编程基础论坛

最新回复

学习了!!!!!!!!!!!!!!!!!!!!  详情 回复 发表于 2013-4-10 19:09

点评

不错:)  详情 回复 发表于 2013-3-3 10:04
点赞 关注
 

回复
举报

280

帖子

0

TA的资源

纯净的硅(中级)

沙发
 

回复 楼主 成风 的帖子

不错
此帖出自编程基础论坛
 
 
 

回复

1万

帖子

141

TA的资源

版主

板凳
 
全局变量除非必要,否则确实应该尽量少用。
此帖出自编程基础论坛

点评

这样是能从一定角度上减少全局变量使用上带来的某些问题,但是不能完全解决。 这个写法,把全局变量变成了局部静态变量,但是给出它的指针后,外部可以读写,和直接访问全局变量一样仍然是有风险的,当然要比直接  详情 回复 发表于 2013-3-7 19:41
 
 
 

回复

436

帖子

5

TA的资源

五彩晶圆(初级)

4
 
原帖由 chunyang 于 2013-3-3 13:42 发表
全局变量除非必要,否则确实应该尽量少用。

这样是能从一定角度上减少全局变量使用上带来的某些问题,但是不能完全解决。
这个写法,把全局变量变成了局部静态变量,但是给出它的指针后,外部可以读写,和直接访问全局变量一样仍然是有风险的,当然要比直接引用上能给人一点警惕性。

其实全局变量和局部静态变量基本一样,只是访问域由编译器做了不同的控制。它们的生存期和存储区是一致的。或者说在底层特性上是完全一致的,只是在代码上的访问域不同。你对局部静态变量引出了指针,那么这样也就把它变成是全局静态变量来使用,是不是。所以没有完全解决问题的。

全局变量或者引深一下,这些公共的实体都几乎无法回避某些问题。正因为它能被多处访问,它才能解决一些问题。但也因为它能被多处访问,它也有引入问题的可能。所以真正要解决这问题,应该是多注意使用上对不对、合理不合理的问题,而不是想把它搞得即是全局变量又不是全局变量。
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

5
 
楼上高见
楼主的方法和我曾经的想法一样,但实际上,这只是 “自欺欺人”,要真正避免使用全局变量,应该是从思路上避免,比方说,在两个模块之间,我确实需要让外部知道这些数落么?我是不是可以只往外输出一个更简单的结果,或者,我的这些数落是否非放在模块外部处理,还是可以本地处理?
很多时候,权衡让数落变得可外部处理,或者把处理的模块引入模块内部,以引入操作换取不向外部开放数据,都是可以权衡后再定夺的。
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

6
 
上一个帖子,手机打错字,所有 数落 都是 数据
此帖出自编程基础论坛
 
 
 

回复

136

帖子

0

TA的资源

一粒金砂(中级)

7
 
不错 !
此帖出自编程基础论坛
 
 
 

回复

135

帖子

0

TA的资源

纯净的硅(初级)

8
 
学习了!!!!!!!!!!!!!!!!!!!!
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表