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

时间:2012-07-23 04:33:04

标签: c++ data-structures

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

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

4 个答案:

答案 0 :(得分:13)

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

namespace global
{
  int var;
  ...
}

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

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

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

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

答案 1 :(得分:0)

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

Examlpe:

int hello; // global
// remove it

现在,把它放在函数中:

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

我们有两个案例:

  

如果某个其他功能需要知道hello的值,请将hello作为参数:

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

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

答案 2 :(得分: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/

答案 3 :(得分:0)

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

相关问题