ショートカット
ファシリテーター × あり方
コーディングの向こう側
Hello, ANOTHER world!
オブジェクト指向のはなし
プログラミングのはなし
C言語実力診断クイズ
eSkillBooks
プログラミングのはなし

変数の寿命

グローバルスコープ、ファイルスコープときたら、次はローカルスコープです(ブロックスコープとも言います)。

ローカルスコープでローカル変数の寿命を制御できるということを知らない人が意外に多いようです。次のプログラムを見てください。

SAMPLE
CODE
#include <iostream.h>

void main()
{
    int nSum = 0;

    {
        int i;
        for ( i=1; i<10; i++ ) {
            nSum += i;
        }
    }

    cout << "SUM = " << nSum << endl;
}

1から9まで足すだけの単純なプログラムです。変数 i に注目してください。中カッコで囲まれた内側で宣言されていますね。このように、中カッコで囲まれた部分のことを「ブロック」と言います。ここでの例のように突然あらわれる中カッコで囲まれた部分以外に、if, while, for, do のあとや関数の定義部で使われる中カッコの中身もすべてブロックです。上の例は C++ のコードですが、 C言語でもブロックは使えます。

ブロックの内側で宣言されたローカルスコープの変数は、そのブロックの内側だけで有効です。外側では使えません。それは次のような動作をするためです。

  • ブロックのはじまりで、その内側で宣言されている変数がスタック上に確保される。
  • ブロック内部のコードが実行される。
  • ブロックの終わりで、はじめに確保された変数が解放される(スタックが戻される)。

一般に、ひとつひとつの変数の寿命(確保されてから解放されるまで)は短い方が理解しやすくなります。したがって、上の例の i のように局所的にしか使わない変数はブロックで囲んでしまうのが良いのです。そうすることによって、コーディングするときに一度に気を配らなければならない範囲を狭めることができます。

(「プログラミングのはなし」は1998年1月から1999年1月にかけて作成されたコンテンツです。)