2

I have a large program in c++ having too many function and global variables. Now, I want to remove those global variables and I want to use only local variables rather than global variables. Can any one suggest me the best way to do this. Thanks!

Its around 4000 lines program in C++. There are 10 classes and 60 functions in those different classes, 30 global variables. The global variables have used between functions of different classes.

4

4 に答える 4

16

私は通常、グローバル変数を名前空間に入れることから始めます

namespace global
{
  int var;
  ...
}

これにより、「var」が使用されている場所でエラーが発生するため、名前空間バリアントへの参照を 1 つずつ置き換えます。すべてのグローバル変数参照が名前空間にあると、どの変数がローカルでどれがグローバルかを簡単に確認できます

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

検索global::varすると、変数が使用されている場所のリストを取得できます。その後、変数が複数のモジュールで使用されているかどうかを確認するために、ケースバイケースで使用方法を確認する必要があります。それ以外の場合の関数引数は、それがローカル変数であることを宣言します。

これは面倒な方法ですが、グローバル変数を排除することは常に価値があります。

于 2012-07-23T04:56:21.730 に答える
0

これらの変数をクラスに入れ、最初にそのクラスのオブジェクトへのポインターを作成すると、それらの変数が使用され、このポインターがそれらの変数を必要とするすべてのメソッドに渡されます。使用しない場合は、オブジェクトを削除することを忘れないでください。

于 2013-06-11T10:33:14.383 に答える
0

それらの宣言をグローバルスコープから削除し、評価された関数に入れるなどの解決策を提案します。

例:

int hello; // global
// remove it

今、それを関数に入れます:

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

2 つのケースがあります。

他の関数が の値を知る必要がある場合は、それをパラメーターとしてhello取ります。hello

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

グローバル変数が 1 つの関数でのみ使用される場合は、static代わりにローカル変数を使用できます。

于 2012-07-23T04:47:05.210 に答える
0

クラスを使用することをお勧めします。変数と関数を 1 つのグループに隠して分類するのに最適です。基本的な構造は次のとおりです。

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 に答える