《编写高质量代码:改善c程序代码的125个建议》——建议10:尽量少使用全局变量

简介:

本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第1章,建议10,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

建议10:尽量少使用全局变量

全局变量的作用前面已经介绍了许多,其主要作用就是增加函数间数据联系的渠道。由于同一源文件或多个源文件中的所有函数都能够引用全局变量的值,因此,如果在一个函数中改变全局变量的值,就会影响到其他的函数,相当于各个函数间有直接的传递通道。由于函数的调用只能带回一个返回值,因此有时可以利用全局变量来增加函数联系的渠道,从而使函数可以得到一个以上的返回值。
尽管如此,过多使用全局变量也会给我们带来许多的麻烦,主要表现为:
由于全局变量是静态存储方式,因此它在程序的全部执行过程中都会占用存储单元,而不是仅在需要时才开辟存储单元。
它使函数的通用性降低,因为函数在执行时依赖其所在的外部变量。在程序设计时,我们要求模块的功能单一,各模块之间的相互影响尽量少,而用全局变量很显然是不符合这个原则的。通常,我们都会要求把C程序中的函数做成一个封闭体,从而通过“实参-形参”的渠道来实现与外界的联系,这样的程序移植性好,可读性强。
使用的全局变量过多,会降低程序的清晰性,我们往往难以清楚地判断出每个瞬时各个外部变量的值。由于在各个函数执行时都可能改变外部变量的值,这就很容易导致程序出错。
如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量会被“屏蔽”,即它将不起任何作用。
基于上面的原因,建议尽量减少全局变量的使用,同时建议你:
如果全局变量仅需要在单个源文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度。
若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度。
使用全局变量、静态全局变量与静态局部变量的函数时,需要考虑重入问题。

相关文章