2.2 変数のスコープ
1.スコープ・ルール
記憶域クラスは識別子の「時間的な寿命」を示し、スコープは識別子のプログラム上の「空間的な寿命」を示していると考えると、大変わかりやすいでしょう。ここで、スコープ(の範)を決定する規則を、スコープ・ルールと呼びます。
C言語において、スコープ・ルールは、以下の様に定められています。
<スコープ・ルール>
- (1)【スコープの単位】
- スコープの単位として以下の4つのものを考える
- プログラム全体
- モジュール(コンパイル単位たる各ファイル)
- 関数ブロック
- 複合文(ブロック)({...}で囲まれた文の列、但しスコープとして考える場合には宣言を最初に持つ)
- (2)【大域的スコープ】
- モジュール内で関数本体の外で宣言された識別子はプログラム全体に渡ってスコープを持つ。但し他のモジュールからの利用に際してはextern宣言をしなければならない。このような識別子を大域的スコープをもつといい、大域的スコープを持った変数を大域変数(global variable)と呼ぶ。
- (3)【モジュール内スコープ】
- モジュール内で関数本体の外でstaticとして宣言された識別子は、そのモジュール内のみのスコープを持つ。
- (4)【局所的スコープ】
- ブロック(関数ブロックと複合文)内で宣言された識別子は、そのブロック内のみでスコープを持つ。このような識別子を局所的スコープをもつといい、局所的スコープを持った変数を局所変数(local variable)と呼ぶ。