C++
 Computer >> コンピューター >  >> プログラミング >> C++

【初心者向け】C++のローカル変数とグローバル変数の違いを徹底解説

変数のスコープとは

スコープ(有効範囲)とは、プログラムの中で変数が参照できる領域のことを指します。C++では、変数を宣言できる場所は大きく分けて以下の3つがあります。

  • ローカル変数:関数やブロックの内部で宣言される変数
  • 仮引数(形式パラメータ):関数のパラメータ定義部分で宣言される変数
  • グローバル変数:すべての関数の外部で宣言される変数

それぞれの特徴を順番に見ていきましょう。

ローカル変数とは

ローカル変数は、その変数が宣言された関数またはコードブロックの内部にあるステートメントからのみ使用できます。ローカル変数は関数の外部からは認識されないため、他の関数から直接アクセスすることはできません。

サンプルコード

#include <iostream>
using namespace std;

int main () {
    // ローカル変数の宣言
    int a, b;
    int c;

    // 実際の初期化
    a = 10;
    b = 20;
    c = a + b;

    cout << c;
    return 0;
}

実行結果

30

この例では、変数 abc はすべて main() 関数内で宣言されたローカル変数です。これらの変数は main 関数の内部でのみ有効となります。

グローバル変数とは

グローバル変数は、すべての関数の外側、通常はプログラムの先頭付近で定義されます。グローバル変数はプログラムの実行期間中ずっとその値を保持し続け、プログラム内のどの関数からでもアクセスできるのが大きな特徴です。

サンプルコード

#include <iostream>
using namespace std;

// グローバル変数の宣言
int g;

int main () {
    // ローカル変数の宣言
    int a, b;

    // 実際の初期化
    a = 10;
    b = 20;
    g = a + b;

    cout << g;
    return 0;
}

実行結果

30

この例では、変数 g がすべての関数の外側で宣言されているためグローバル変数となり、main 関数から計算結果を代入・出力しています。

同名のローカル変数とグローバル変数の扱い方

C++では、ローカル変数とグローバル変数に同じ名前を付けることが可能です。ただし、関数内に同じ名前の変数が存在する場合は、ローカル変数が優先されます。関数内から同じ名前のグローバル変数にアクセスしたい場合は、スコープ解決演算子(::)を使用する必要があります。

サンプルコード

#include <iostream>
using namespace std;

// グローバル変数の宣言
int g = 20;

int main () {
    // ローカル変数の宣言
    int g = 10;

    cout << g;   // ローカル変数を表示
    cout << ::g; // グローバル変数を表示
    return 0;
}

実行結果

10
20

この例のように、単に g と記述した場合はローカル変数が参照されて「10」が出力されます。一方、::g のようにスコープ解決演算子を付けるとグローバル変数が参照され、「20」が出力されます。

まとめ

  • ローカル変数は、宣言された関数やブロックの内部でのみ有効
  • グローバル変数は、プログラム全体で有効であり、すべての関数からアクセス可能
  • 同名の変数が存在する場合はローカル変数が優先され、グローバル変数にはスコープ解決演算子 :: を使ってアクセスする

変数のスコープを正しく理解することは、バグの少ない保守性の高いコードを書くために非常に重要です。特にグローバル変数はどこからでも変更できてしまうため、乱用せず必要最小限にとどめるのが良い設計の基本です。

  1. Pythonのグローバル変数とローカル変数の違いを徹底解説!スコープとglobalキーワードの基本

    Pythonの変数には、大きく分けて「グローバル変数」と「ローカル変数」の2種類があります。 グローバル変数のスコープはプログラム全体に及ぶためどこからでもアクセスできますが、ローカル変数のスコープは、その変数が定義された関数の中だけに限定されます。 def func(): x = Python print(x) print(s) s = Tutorialspoint print(s) func() print(x) 上記のプログラムでは、xがローカル変数、sがグローバル変数です。ローカル変数は、それを定義した関数(この場合はfunc())の中からしかアクセスできず、

  2. Pythonのグローバル変数とローカル変数の違いとは?わかりやすく解説

    Pythonにおいて、グローバル変数とはプログラム全体(モジュール内のどこからでも)アクセスできる変数のことです。一方、ローカル変数は特定のスコープ内、たとえば関数定義の中でのみアクセスできる変数であり、関数内で一時的に使用される変数などがこれに該当します。コード例以下のコードを見てみましょう。q = I love coffee # グローバル変数 def f(): p = Me Tarzan, You Jane. # ローカル変数 print(p) f() print(q)実行結果このコードを実行すると、次のような出力が得られます。Me Tarzan, You Jan