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


当前回答

正如有人在另一篇文章中所说的那样:“在你完全理解这样做的后果之前,不应该打破这样的规则。”

有时候,全局变量是必要的,或者至少是非常有用的(例如,处理系统定义的回调)。另一方面,他们也非常危险,因为所有你被告知的原因。

编程的许多方面可能应该留给专家去做。有时候你需要一把非常锋利的刀。但在你准备好之前,你不能使用它……

其他回答

迟早,您将需要更改该变量的设置方式或访问它时发生的情况,或者您只需要查找它被更改的位置。

实际上,不使用全局变量总是更好。只需编写大坝获取和设置方法,并在一天、一周或一个月后当你需要它们时通知你。

全局变量有多糟糕就有多糟糕。

如果您正在创建一个完全封装的程序,则可以使用全局变量。使用全局变量是一种“罪过”,但编程的罪过在很大程度上是哲学上的。

如果你看看洛杉矶。你会看到一种语言,它的变量是全局的。它是不可伸缩的,因为所有的库都只能使用全局变量。

也就是说,如果您有选择,并且可以忽略程序员的哲学,那么全局变量并不是那么糟糕。

Gotos也是,如果你使用得当的话。

最大的“坏”问题是,如果你使用错误,人们尖叫,火星着陆器坠毁,世界爆炸....或者类似的东西。

全局变量的使用实际上取决于需求。它的优点是减少了重复传递值的开销。

但是你的教授是对的,因为它会引起安全问题,所以应该尽可能避免使用全局变量。全局变量还会产生一些问题,有时难以调试。

例如:-

变量值在运行时被修改的情况。此时,很难确定是哪部分代码在什么条件下修改了它。

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

全局变量通常很糟糕,特别是当其他人正在处理相同的代码,并且不想花20分钟搜索变量被引用的所有位置时。添加修改变量的线程带来了一个全新的问题。

在单个翻译单元中使用匿名名称空间中的全局常量是很好的,在专业应用程序和库中无处不在。但是如果数据是可变的,并且/或者它必须在多个tu之间共享,那么您可能想要封装它——如果不是为了设计,那么也是为了任何人调试或使用您的代码。