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


当前回答

全局变量在小程序中很好,但如果在大程序中以同样的方式使用就很糟糕了。

这意味着你可以很容易地在学习中养成使用它们的习惯。这就是你的教授想要保护你的东西。

当你更有经验的时候,在他们没事的时候学习就更容易了。

其他回答

重要的是要记住总体目标:清晰

“无全局变量”规则的存在是因为大多数时候,全局变量使代码的含义不太清楚。

然而,像许多规则一样,人们记住的是规则,而不是规则的意图。

我曾经见过一些程序,为了避免全局变量的危害,通过传递大量参数,使代码的大小增加了一倍。最后,使用全局变量将使程序对阅读它的人更清楚。由于盲目地遵守规则的文字,原来的程序员未能实现规则的意图。

所以,是的,全局变量通常不好。但是如果你觉得在最后,程序员的意图通过使用全局变量变得更加清晰,那么就继续吧。但是,请记住,当您强迫某人访问第二段代码(全局代码)以理解第一部分是如何工作的时,清晰度会自动下降。

全局变量是不好的,如果它们允许您操作应该只在本地修改的程序的某些方面。在面向对象编程中,全局变量经常与封装思想相冲突。

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

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

绝对不是。但是滥用它们……这很糟糕。

出于某种原因而无意识地删除它们只是……盲目的。除非您知道其优点和缺点,否则最好避免使用全局变量,并按照您学到的方法进行操作,但全局变量并没有什么隐含的错误。当你了解了利弊后,最好自己做决定。

在多线程应用程序中,使用局部变量代替全局变量以避免竞态条件。

当多个线程访问共享资源时,至少有一个线程对数据有写访问权,就会发生竞争条件。然后,程序的结果是不可预测的,它取决于不同线程访问数据的顺序。

更多信息请访问https://software.intel.com/en-us/articles/use-intel-parallel-inspector-to-find-race-conditions-in-openmp-based-multithreaded-code