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

この例では、変数 a、b、c は main() 関数内で宣言されたローカル変数です。main() の外側からこれらの変数へアクセスすることはできません。

グローバル変数の使い方

グローバル変数は、すべての関数の外部、通常はプログラムの先頭付近で定義します。グローバル変数はプログラムが動作している間ずっと値を保持し続け、どの関数からでもアクセス可能です。なお、明示的に初期化しなかったグローバル変数は自動的に 0 で初期化される点にも注意してください。

サンプルコード

#include <iostream>
using namespace std;
// グローバル変数の宣言
int g;
int main () {
    // ローカル変数の宣言
    int a, b;

    // 実際の初期化
    a = 10;
    b = 20;
    g = a + b;
    cout << g;
    return 0;
}

出力結果

30

ローカル変数とグローバル変数が同名の場合

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

サンプルコード

#include <iostream>
using namespace std;
// グローバル変数の宣言
int g = 20;
int main () {
    // ローカル変数の宣言
    int g = 10;

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

出力結果

10
20

まとめ

変数のスコープを正しく理解することは、バグを防ぎ可読性の高いコードを書くうえで非常に重要です。基本はローカル変数を中心に使い、複数の関数間で共有が必要な値だけをグローバル変数として定義するのが良い設計とされています。また、同名の変数が存在する場合でも、スコープ解決演算子「::」を使えばグローバル変数を明示的に参照できるため、覚えておくと便利です。

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

    Pythonの変数のスコープとは プログラム内で宣言されたすべての変数が、どこからでもアクセスできるわけではありません。変数にアクセスできるかどうかは、その変数をどこで宣言したかによって決まります。 変数の「スコープ」とは、特定の識別子(変数名)にアクセスできるプログラム上の範囲のことです。Pythonには、大きく分けて以下の2種類のスコープが存在します。 グローバル変数(Global variables) ローカル変数(Local variables) グローバル変数とローカル変数の違い 関数の内部で定義された変数はローカルスコープを持ち、関数の外部で定義された変数はグローバルスコープ

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

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