2

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

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

4

4 回答 4

16

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

namespace global
{
  int var;
  ...
}

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

if ( global::var == 1 ) ...

现在通过搜索global::var你会得到一个使用它的变量列表,那么你需要逐个查看使用情况,看看一个变量是否在多个模块中使用,在这些情况下,你可能需要将它作为在其他情况下,函数参数声明它是一个局部变量。

这是一种繁琐的方法,但消除全局变量总是值得的。

于 2012-07-23T04:56:21.730 回答
0

我建议使用一个类。它们非常适合将变量和函数隐藏到一组中并进行分类。这是基本结构:

class example
{
public:
    example(); //basic constructor
    int function1();  //example function
    int x;  // a variable accesible globally
private:
    int y;  // a variable only accesible by functions of the class
};

调用每个函数很容易,但我不会解释,因为我不想启动文本墙。您可以访问此链接了解更多信息:http ://www.cplusplus.com/doc/tutorial/classes/

于 2012-07-23T06:40:02.600 回答
0

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

示例:

int hello; // global
// remove it

现在,将其放入函数中:

void func()
{
   int hello; // local
  //...

我们有两种情况:

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

void func2(const int &helloVar)
{
   // ...

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

于 2012-07-23T04:47:05.210 回答
0

您可以将这些变量放在一个类中,然后在第一个位置创建指向该类对象的指针将使用这些变量,然后将此指针传递给每个需要这些变量的方法,不要忘记在不使用时删除该对象。

于 2013-06-11T10:33:14.383 回答