删除c ++程序中的全局变量

vis*_*was 2 c++ data-structures

我有一个c ++的大程序,它有太多的函数和全局变量.现在,我想删除那些全局变量,我想只使用局部变量而不是全局变量.任何人都可以建议我这样做的最好方法.谢谢!

它在C++中的大约4000行程序.在这些不同的类中有10个类和60个函数,30个全局变量.全局变量用于不同类的函数之间.

And*_*rsK 13

我通常首先将全局变量放在命名空间中

namespace global
{
  int var;
  ...
}
Run Code Online (Sandbox Code Playgroud)

这将导致您在使用'var'的地方出现错误,然后我只是将引用逐个替换为命名空间变体.一旦所有全局变量引用都在命名空间中,就更容易看到哪些变量是本地变量,哪些变量是全局变量

if ( global::var == 1 ) ...
Run Code Online (Sandbox Code Playgroud)

现在通过搜索global::var获得一个使用它的变量列表,然后你需要逐个查看用法以查看变量是否在几个模块中使用,在这些情况下你可能需要将其作为一个传递在其他情况下,函数参数声明它是一个局部变量.

这是一个繁琐的方法,但消除全球变量总是值得做的.


小智 0

我建议一个解决方案,例如从全局范围中删除它们的声明并将它们放入赞赏的函数中。

示例:

int hello; // global
// remove it
Run Code Online (Sandbox Code Playgroud)

现在,将其放入函数中:

void func()
{
   int hello; // local
  //...
Run Code Online (Sandbox Code Playgroud)

我们有两种情况:

如果其他函数需要知道 的值hello,则让它将其hello作为参数:

void func2(const int &helloVar)
{
   // ...
Run Code Online (Sandbox Code Playgroud)

如果全局变量仅由单个函数使用,则可以使用static局部变量。

  • 小心静电!根据编译器设置,每个线程可能会获得不同的副本。此外,即使它们使用相同的存储,您也需要注意并发问题。 (3认同)