3

我一直在读到使用全局变量是不好的编程设计,但这是否意味着全局常量也不好?

有什么替代方法可以代替全局变量/常量,以及声明多个源文件中需要的常量的最佳方法是什么?

4

3 回答 3

11

全局变量不好的主要原因是对共享状态的依赖,这使得程序的不同部分很容易通过以您不打算的方式操纵共享状态来对程序的其他部分造成意外干扰,从而使程序更容易出错、难以调试和难以维护。

另一方面,常量几乎没问题,除了它们会污染全局命名空间(这可能会在编译时通过更改编译单元中符号的含义而导致意想不到的后果)。如果您可以在特定的名称空间/范围中声明它们,那么您会没事的。

于 2012-07-14T23:17:37.947 回答
4

全局变量的真正问题在于它们鼓励从代码中的许多点进行更改。做某事的函数也有改变全局状态的副作用(事实上,函数式编程根本不允许副作用来避免这个陷阱)。

这种编程风格很难正确调试和维护。

将数据保存在靠近它使用的地方,以便有一个明确定义的机制来改变它。

全局常量不会遇到同样的问题。

于 2012-07-14T23:16:46.877 回答
0

全局变量会导致大量(通常是未知的)依赖于共享状态的代码的实际问题。这可能(确实)导致难以理解、跟踪等的交互。简而言之,大量代码最终紧密耦合,这通常会导致问题。

全局常数主要是一个(潜在的)哲学问题。由于它们是恒定的,因此大多数来自全局变量的真正问题都不会出现。同时,质疑一个特定的常数是否真的应该是全局的也是完全合理的。如果(例如)您正在处理物理学,将光速定义为全局常数可能是有意义的。根据领域的不同,Pi、e 等也可以作为全局变量。另一方面,如果您可以合理地将对此类事物的需求限制为更少的代码,那通常是可取的。Pi 的值不会改变,但类似于

 x = area(some_circle);

往往比以下更具可读性/可理解性:

x = some_circle.radius * some_circle.radius * Pi;
于 2012-07-15T00:13:53.473 回答