在C/ c++中,全局变量像我的教授认为的那样糟糕吗?
当前回答
使用全局变量有点像扫地毯下的灰尘。这是一种快速的解决方法,在短期内比用吸尘盆或吸尘器清理要容易得多。然而,如果你后来搬了地毯,下面会有一个大的惊喜。
其他回答
是的,因为如果你让不称职的程序员使用它们(阅读90%,尤其是科学家),你最终会得到600多个全局变量分布在20多个文件和一个12000行的项目中,其中80%的函数采用void,返回void,完全在全局状态下运行。
除非你了解整个项目,否则你很快就不可能在任何一个点上理解正在发生什么。
只有在别无选择时才应该使用全局变量。在90%的情况下,引入全局变量是为了节省传递参数的成本。然后发生多线程/单元测试/维护编码,你就有问题了。
是的,在90%的情况下全局变量是不好的。在你的大学生活中,不太可能遇到例外。我能想到的一个例外是处理固有的全局对象,比如中断表。像DB连接这样的东西似乎是全局的,但不是。
全局变量的使用实际上取决于需求。它的优点是减少了重复传递值的开销。
但是你的教授是对的,因为它会引起安全问题,所以应该尽可能避免使用全局变量。全局变量还会产生一些问题,有时难以调试。
例如:-
变量值在运行时被修改的情况。此时,很难确定是哪部分代码在什么条件下修改了它。
我认为你的教授试图在一个坏习惯开始之前就阻止它。
全局变量有自己的位置,就像许多人说的,知道在哪里和何时使用它们可能很复杂。所以我认为与其深入研究全局变量的原因,方式,时间和地点教授决定禁止。谁知道呢,将来他可能会取消禁令。
是的,但是在停止使用全局变量的代码并开始编写使用全局变量的代码之前,您不会招致全局变量的成本。但成本依然存在。
换句话说,这是一种长期的间接成本,因此大多数人认为这并不坏。
推荐文章
- cplusplus.com给出的错误、误解或坏建议是什么?
- C多行宏:do/while(0) vs作用域块
- 找出质数最快的算法是什么?
- time_t最终的类型定义是什么?
- 我需要显式处理负数或零时,总和平方数字?
- c++枚举类可以有方法吗?
- 函数名周围的括号是什么意思?
- 用C语言创建自己的头文件
- 格式化IO函数(*printf / *scanf)中的转换说明符%i和%d之间的区别是什么?
- 将析构函数设为私有有什么用?
- main()中的Return语句vs exit()
- 为什么c#不提供c++风格的'friend'关键字?
- 如果不是内存地址,C指针到底是什么?
- 在函数的签名中添加关键字
- 我如何在Visual Studio中预处理后看到C/ c++源文件?