Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 控制对C+的访问+;全球范围?_C++_C_Class_Scope - Fatal编程技术网

C++ 控制对C+的访问+;全球范围?

C++ 控制对C+的访问+;全球范围?,c++,c,class,scope,C++,C,Class,Scope,我有时不得不将一些成熟的c源代码转换成类。有时出现的一个问题是某些函数共享全局变量。这通常很难找到 我只是在想,是否有可能明确禁止类使用全局范围内的符号或类似的东西。有什么想法吗 编辑: 当然,我可以搜索所有全局变量并将它们转换为类成员,但这可能有点困难。如果源代码有大约1000行,我就不能检查所有的代码。我只是想知道,编译器是否能帮我找到它们。您可以将所有全局变量放在名称空间范围内(可能不止1个)。在此之后,编译器将投诉ex全局变量。去做相应的修理 编辑:对于新的问题,否编译器没有工具可以挑出

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

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

编辑:


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

您可以将所有全局变量放在
名称空间
范围内(可能不止1个)。在此之后,编译器将投诉ex全局变量。去做相应的修理

编辑:对于新的问题,编译器没有工具可以挑出全局变量。此外,查找全局变量很容易,不需要代码检查或重新构造。这是一项机械工作。一旦找到它,就将其包含在
名称空间中。e、 g

int g_value;
皈依

namespace Globals {
  int g_value;
};

从全局范围中删除所有变量;)等一下,您正在编写类,因此您可以控制使用或不使用哪些变量-那么问题出在哪里呢?@zerm的建议并没有那么糟糕。但与其删除变量,不如逐个注释掉它们。然后,当您构建时,您将从引用变量的所有位置获得错误,并且您可以更好地计划将公共变量放置在何处(提示:
名称空间
是您的朋友)。理论上所有这些都是正确的,但我正在寻找一个更自动化的解决方案。查看我的编辑。@REDSOFTADAIR:1000行?你可以手工做。1000000行可能会让人望而生畏,但对于1000行,你在工具上花费的时间比在工作上花费的时间要多。肯定不止一个名称空间,否则它就像拥有全局变量一样糟糕。@JoachimPileborg:实际上,我不太明白这一点。无论它的范围是什么,它仍然是全球性的,在任何地方都可以访问。。。