【问题标题】:Control access to C++ global scope?控制对 C++ 全局范围的访问?
【发布时间】:2012-01-10 12:48:49
【问题描述】:

有时我必须将一些成熟的 c 源代码转换为类。有时会出现的一个问题是某些函数共享全局变量。这通常很难找到。

我只是在考虑,是否有可能明确禁止类使用全局范围内的符号或类似的东西。有什么想法吗?

编辑:

当然,我可以搜索所有全局变量并将它们转换为类成员,但这可能有些困难。如果源代码有大约 1000 行,我无法查看所有代码。我只是想知道编译器是否可以帮助我找到它们。

【问题讨论】:

  • 从全局范围内删除所有变量 ;)
  • 等一下,您正在编写类,因此您可以控制使用或不使用哪些变量 - 那么问题是什么?
  • @zerm 的建议还不错。但是不要删除变量,只需将它们一一注释掉。然后,当您构建时,您会从引用变量的所有位置得到错误,并且您可以更好地计划放置公共变量的位置(提示:namespace 是您的朋友。)
  • 理论上所有这些都是正确的,但我正在寻找更自动化的解决方案。查看我的编辑。
  • @REDSOFTADAIR:1 000 行?您可以手动完成。 1 000 000 行会让人望而生畏,但 1 000 行你会花在工具上的时间比工作上的时间还要多。

标签: c++ c class scope


【解决方案1】:

您可以将所有的全局变量放在一个namespace 范围内(可能超过1 个)。在此之后,编译器将抱怨前全局变量。只需去相应地修复即可。

编辑:对于新问题,编译器没有工具可以挑选出全局变量。此外,查找全局变量很容易,不需要代码审查或重组。这是一项机械工作。找到它后,将其包含在namespace 范围内。例如

int g_value;

转换为,

namespace Globals {
  int g_value;
};

【讨论】:

  • 肯定不止一个命名空间,否则和拥有全局变量一样糟糕。
  • @JoachimPileborg:实际上,我不太明白这一点。无论其范围如何,它仍然是全球性的,可在任何地方访问......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多