プログラムにおいて、変数や関数などの識別子(名前)を参照できる範囲のことです。
仕様はプログラミング言語によって異なります。多くの場合、変数や関数を宣言もしくは定義した位置に応じて、スコープが決定されます。
スコープを表現するためにブロックを使う言語が多いです。次の例はC言語のもので、{
と }
がブロックです。ブロックの内側で宣言された変数の識別子は、同じブロックか、内側のブロックからしか参照できません。
void func(void)
{
int a = 0;
{
int b = a; // a は参照できる
// ...
} // b のスコープはここまで
= 10;
a = 10; // エラー。b は見えない
b
// ...
} // a のスコープはここまで
この例にように、スコープが関数内やブロック内に限定されている変数をローカル変数と呼ぶことがあります。これに対して、スコープが限定されず、プログラム全体から参照できる変数をグローバル変数と呼ぶことがあります。
よく混同される用語に、記憶域期間があります。記憶域期間は、変数やオブジェクトの値を記憶しているメモリ上の実体が維持される期間のことを指します。たとえば、関数内でのみ実体が維持される変数は、その関数内が記憶域期間です(自動記憶域期間)。これはローカル変数と同じことをいっているようにも思えるかもしれませんが、ローカル変数はスコープの話をしているのであって、記憶域期間がどうであるのかをいっていません。実際、C言語や C++ では、static指定子を付加して宣言されたローカル変数は、関数を抜けても実体が維持されており、記憶域期間はプログラムの実行開始から終了まであります(静的記憶域期間)。つまり、ローカル変数と呼べるものでも、生存期間は2通り以上ありえるということになります。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |