【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
まとめ
変数のスコープを正しく理解することは、バグを防ぎ可読性の高いコードを書くうえで非常に重要です。基本はローカル変数を中心に使い、複数の関数間で共有が必要な値だけをグローバル変数として定義するのが良い設計とされています。また、同名の変数が存在する場合でも、スコープ解決演算子「::」を使えばグローバル変数を明示的に参照できるため、覚えておくと便利です。
-
Pythonの変数のスコープを徹底解説!グローバル変数とローカル変数の違い
Pythonの変数のスコープとは プログラム内で宣言されたすべての変数が、どこからでもアクセスできるわけではありません。変数にアクセスできるかどうかは、その変数をどこで宣言したかによって決まります。 変数の「スコープ」とは、特定の識別子(変数名)にアクセスできるプログラム上の範囲のことです。Pythonには、大きく分けて以下の2種類のスコープが存在します。 グローバル変数(Global variables) ローカル変数(Local variables) グローバル変数とローカル変数の違い 関数の内部で定義された変数はローカルスコープを持ち、関数の外部で定義された変数はグローバルスコープ
-
Pythonのグローバル変数とローカル変数の違いを徹底解説!スコープとglobalキーワードの基本
Pythonの変数には、大きく分けて「グローバル変数」と「ローカル変数」の2種類があります。 グローバル変数のスコープはプログラム全体に及ぶためどこからでもアクセスできますが、ローカル変数のスコープは、その変数が定義された関数の中だけに限定されます。 def func(): x = Python print(x) print(s) s = Tutorialspoint print(s) func() print(x) 上記のプログラムでは、xがローカル変数、sがグローバル変数です。ローカル変数は、それを定義した関数(この場合はfunc())の中からしかアクセスできず、