全局变量的优缺点

全局变量的优缺点

1. 写在前面

在上一文中,我谈到了在完成项目中将需要的变量分为了“全局变量”和“局部变量”,但是在后来的学习中发现,虽然全局变量有一些优点,但同时也伴随着许多的缺点,于是在此做出一些小结,并寻找替代全局变量的方法。


2.全局变量的定义

全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。 只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。 但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。


3.全局变量的优点

1)全局变量顾名思义全局可见的变量,全局变量生命周期长,自开始时创建直到全部函数运行结束后才被释放
2)任何 一个函数或线程都可以读写全局变量,在一定程度上使得函数之间变量的同步变得更为简单。
3)对于初学者较为友好,定义和使用起来都较为简单,且在项目只包含单个或少数几个源文件和头文件时弊端并不明显。
4)全局变量内存地址固定,读写效率比较高。
5)可以减少变量的个数,减少由于实际参数和形式参数的数据传递带来的时间消耗。

4.全局变量的缺点

1)长期占用内存
由于之前提到的全局变量生命周期长,这使得在整个程序运行的过程中全局变量一直存在,始终占有那块存储区,难以被释放
2)难以定位修改
由于全局变量定义在函数之外,使得全局变量是公共的,即全部函数都可以访问,难以定位全局变量在哪里被修改,加大了调试的难度
3)不利于后期的维护
在前期编写全局变量时确实是一种“快捷通道”,但是在后期维护程序时哪怕仅是增加修改删除小功能,往往要从上到下掘地三尺地修改,涉及大多数模块,而原有的代码注释却忘了更新修改,而这对于后来的维护者,就像一团迷雾一样。
4)降低函数的可读性
使用全局变量的函数,需要关注全局变量的值,增加了理解的难度
5)破坏函数的封装性能
函数类似于一个黑匣子,一般是通过函数参数和返回值进行输入输出,函数内部实现相对独立。但函数中如果使用了全局变量,那么函数体内的语句就可以绕过函数参数和返回值进行存取,这种情况增加了耦合性,也破坏了函数的独立性,使函数对全局变量产生依赖。同时,也降低了该函数的可移植性。
6)降低函数的可移植性
原因与上一条差不多,破坏了函数的封装性能以及增加了函数对全局变量的依赖的同时,也就使得将函数移植到可操作性降低。
7)增加程序之间的耦合性
使用全局变量会修改全部变量会影响所有用到它的模块,不利于调试,这种弊端在初学时仅有单个源程序和头文件的情况不明显,但是在以后代码量上来了之后,可能会被相互间错的全局变量的使用搞到头秃。

5.全局变量该用还是要用

当然全局变量改用的时候还是要用,在有些时候全局变量也不得不用,但是当使用全局变量的时候也需要注意一件事情:能藏多深藏多深

1)如果只有某.c文件用,就static到该文件中,顺便把结构体定义也收进来;
2)如果只有一个函数用,那就static到函数里面去;
3)如果非要开放出去让人读取,那就用函数return出去,这样就是只读属性了;

你可能感兴趣的:(java,c++,c语言,开发语言)