c - 什么时候可以在 C 中使用全局变量?

标签 c global-variables

显然有很多不同的意见,从“永远不要!总是封装(即使它只是一个宏!)”到“这没什么大不了的 –在方便的时候使用它们。"

所以。

具体、具体的原因(最好有例子)

  • 为什么全局变量是危险的
  • 何时应该使用全局变量来代替其他变量
  • 对于那些试图不恰本地使用全局变量的人,有什么替代方案

虽然这是主观的,但我会选择一个答案(对我来说最能代表每个开发人员对全局变量应该有的爱恨交织的关系)并且社区将在下面投票给他们的答案。

我认为对于新手来说获得此类引用很重要,但如果存在与您的答案基本相似的另一个答案,请不要将其弄乱 - 添加评论或编辑其他人的答案。

最佳答案

变量应该总是有一个尽可能小的范围。其背后的论点是,每次增加范围时,都会有更多可能修改变量的代码,因此解决方案会更加复杂。

因此很明显,如果设计和实现自然允许,则最好避免使用全局变量。因此,除非确实需要,否则我不喜欢使用全局变量。

我也不同意“从不”的说法。与任何其他概念一样,全局变量只应在需要时使用。我宁愿使用全局变量,也不愿使用一些人工构造(如传递指针),后者只会掩盖真正的意图。

使用全局变量的一些很好的例子是单例模式实现或嵌入式系统中的寄存器访问。

关于如何实际检测全局变量的过度使用:检查,检查,检查。每当我看到全局变量时,我都必须问自己:在全局范围内真的需要它吗?

关于c - 什么时候可以在 C 中使用全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/176118/

相关文章:

c - 读取由同一驱动程序的其他字符设备写入一个字符设备的数据

c - 全局结构数组

c# - 用于运行总计的全局变量的替代方案

c++ - 为什么我程序中的一个变量使用了 60% 的执行时间?

swift - 在 Swift 中初始化全局变量的最佳实践是什么?

c++ - 从 DLL 访问 Windows CE .EXE 符号

c - 如何在C中使用 'fwrite'?

c - 如何添加两个字符串?

c - malloc函数(动态内存分配)导致全局使用时出错

javascript - jQuery/Javascript 全局和局部变量混淆 - 基础