[讨论] 关于全局变量

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

两种方法产生的汇编代码是一样的,但后者避免了全局变量,应该有一定的参考价值。

回复评论 (7)

回复 楼主 成风 的帖子

不错
子时DIY http://atzishi.blog.163.com http://atzishi.taobao.com
点赞  2013-3-3 10:04
全局变量除非必要,否则确实应该尽量少用。
点赞  2013-3-3 13:42
引用: 原帖由 chunyang 于 2013-3-3 13:42 发表
全局变量除非必要,否则确实应该尽量少用。

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

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

全局变量或者引深一下,这些公共的实体都几乎无法回避某些问题。正因为它能被多处访问,它才能解决一些问题。但也因为它能被多处访问,它也有引入问题的可能。所以真正要解决这问题,应该是多注意使用上对不对、合理不合理的问题,而不是想把它搞得即是全局变量又不是全局变量。
点赞  2013-3-7 19:41
楼上高见
楼主的方法和我曾经的想法一样,但实际上,这只是 “自欺欺人”,要真正避免使用全局变量,应该是从思路上避免,比方说,在两个模块之间,我确实需要让外部知道这些数落么?我是不是可以只往外输出一个更简单的结果,或者,我的这些数落是否非放在模块外部处理,还是可以本地处理?
很多时候,权衡让数落变得可外部处理,或者把处理的模块引入模块内部,以引入操作换取不向外部开放数据,都是可以权衡后再定夺的。
点赞  2013-3-30 17:52
上一个帖子,手机打错字,所有 数落 都是 数据
点赞  2013-3-30 17:54
不错 !
点赞  2013-3-31 15:46
学习了!!!!!!!!!!!!!!!!!!!!
点赞  2013-4-10 19:09
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复