您的位置:首页 > 编程语言 > C语言/C++

C/C++全局变量(部分总结)

2016-07-04 09:22 337 查看
C/C++中的全局变量意味着,当我们想使用本工程中的一个变量的时候,只要声明一下就可以使用,方便。

但是全局变量也带来了很多的困扰(貌似java中不存在全局变量这一概念)



因为全局变量容易导致代码的可复用性下降,以及对象管理的困难。

  试想,如果某个类使用了全局变量,则移植该类的时候,必须将全局变量也一起移植。更可怕的是,如果这个全局变量还是一个对象,并且初始化也在不同的类中实现,那么所有这些代码将被永久捆绑在一起,无法分离了。任何一个与此全局变量相关联的代码一旦有改动,即可对其他使用该变量的代码产生不可预知的影响。

  相较于全局变量,用户可以使用单例来替代,并且保证单例的初始化只在本类方法中实现,外部只是单纯的获取或者暂存。这种方式可以降低全局变量带来的麻烦。。。。。。。(如何替代。。。替代的方法需要考究一下)

全局变量的存在主要有以下一些原因:

1,使用全局变量会占用更多的内存(因为其生命期长),不过在计算机配置很高的今天,这个不成为什么问题,除非使用的是巨大对象的全局变量,能避免就一定要避免。

2,使用全局变量程序运行时速度更快一些(因为内存不需要再分配),同样现在也快不了多少。

3,对于局部变量的名字空间污染,这个在不使用太多变量时是可以避免的。 总之,全局变量可以使用,但是全局变量使用时应注意的是尽可能使期名字易于理解,而且不能太短,避免名字空间的污染;避免使用巨大对象的全局变量。

局部变量:在程序中,只在特定的过程或函数中可以访问的变量,是相对与全局变量而言的。

全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。

局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。

4.提高了耦合性,牵一发而动全身,时间久了,代码长了,你都不知道全局变量被哪些函数改过,更怕全局的、起标志作用的变量,处理不好会被害死,同理外部变量比之更甚,尽量不用。不过不是绝对的,如果有清理的逻辑,和必要的时候使用这两种变量会是很好的解决方法。

5.提高了模块间的耦合性,对后期维护、扩展和复用都带来极大影响。 比如说你想在新的系统中复用旧系统的模块,你就会发现由于全局变量的存在,单个旧模块极难单独剥离出来; 维护上来说,模块之间的全局变量,你会常常发现修改代码功能时,不同功能对同一全局变量的操作上经常发生冲突。。。 呵呵,这些问题,你维护过一段时间这些代码就有体会了 如果对此类问题感兴趣,推荐去看看《代码大全2》,里面对全局变量的使用有很好的建议;

6.好处是:便于传递参数,数据能在整个程序中共享。不用很麻烦的传递参数,也省去了传递参数的时间,会减少程序的运行时间。

坏处是:全局变量不好控制,不利于程序的结构化,因为程序中所有的函数都可以随便的修改全局变量,可能导致不可预测的错误,也不便于调试。另外由于全局变量可能会于局部变量冲突,导致程序混乱。 

因此一般的建议是尽量不用或少用全局变量。

 7.要记住程序的“正确性”肯定是第一重要的,传递参数如果说有性能损失的话(我个人不认为有多少性能损失),和正确性比较起来实在是微不足道的。而全局变量带来的模块间的强耦合是造成程序不正确的很大的一个因素

 8.全局变量太多会增加代码维护的困难,也加大了内存的用量,增大程序的体积,某个地方出错,会造成很多地方出错,欲修改某个地方,可能会造成很多地方都要跟着修改。

 9.最明显的一个问题就是耦合性被增强,代码的维护和可移植性差。 

10.模块间全局变量太多,肯定是模块耦合太多,不利于程序稳定,当出问题的时候也不容易定位问题 

11.而且如果存在多个模块线程同时修改全局变量的话,也容易造成冲突,需要加线程锁,这样程序的复杂性就高了 12.耦合性变高。不提倡用全局变量。如果你的程序没有全局变量。说明你是高手。否则。只能说程序写的一般。

13.个人认为是嵌入式的代码,如果是底层的代码的话,这样效率会好些,当然逻辑上出错的可能性也比较大;如果是上层的代码的话,还是少全局变量好,减少耦合,增大封装
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cpp