在C/ c++中,全局变量像我的教授认为的那样糟糕吗?


当前回答

我认为你的教授试图在一个坏习惯开始之前就阻止它。

全局变量有自己的位置,就像许多人说的,知道在哪里和何时使用它们可能很复杂。所以我认为与其深入研究全局变量的原因,方式,时间和地点教授决定禁止。谁知道呢,将来他可能会取消禁令。

其他回答

使用全局变量有点像扫地毯下的灰尘。这是一种快速的解决方法,在短期内比用吸尘盆或吸尘器清理要容易得多。然而,如果你后来搬了地毯,下面会有一个大的惊喜。

只有在别无选择时才应该使用全局变量。在90%的情况下,引入全局变量是为了节省传递参数的成本。然后发生多线程/单元测试/维护编码,你就有问题了。

是的,在90%的情况下全局变量是不好的。在你的大学生活中,不太可能遇到例外。我能想到的一个例外是处理固有的全局对象,比如中断表。像DB连接这样的东西似乎是全局的,但不是。

我的教授曾经说过这样的话:使用全局变量是可以的,如果你使用正确的话。我不认为我能正确地使用它们,所以我很少使用它们。

全局变量的问题是,由于每个函数都可以访问这些变量,因此越来越难以确定哪些函数实际读写这些变量。

为了理解应用程序是如何工作的,您几乎必须考虑修改全局状态的每个函数。这是可以做到的,但随着应用程序的增长,它将变得越来越困难,几乎不可能(或至少完全浪费时间)。

如果不依赖全局变量,则可以根据需要在不同函数之间传递状态。这样,您就有更好的机会理解每个函数的功能,因为您不需要考虑全局状态。

我通常对很少改变的值使用全局变量,如单例或动态加载库中函数的函数指针。在多线程应用程序中使用可变全局变量往往会导致难以跟踪错误,所以我尽量避免将其作为通用规则。

使用全局变量而不是传递参数通常更快,但如果您正在编写一个多线程应用程序(您现在经常这样做),它通常不会很好地工作(您可以使用线程静态,但性能收益是值得怀疑的)。