2.2      記憶クラスって何?


   C言語では変数の記憶空間の割り当てを行う方法として、大きく分けて2つの方法があります。1つは記憶空間をメモリ上に固定的に割り当てる方法であり、もう一つは関数が呼び出されるときのみ記憶空間(スタックなど)に割り当て、その関数の実行が終わり次第、割り当てを取り消す方法です。前者を静的変数、後者を自動変数と呼びます。この変数の性質を記憶クラスと呼びます。小さなプログラムを作成する際にはあまり気にする必要はありませんが、多くの関数が入り組んだ大きなプログラムを作成する際には、重要です。

記憶クラス 宣言例 有効範囲と初期化
自動変数 auto int a;

int a;
宣言されている実行単位ブロック全域で有効。
実行単位終了後に消滅。
コンパイラは初期化しない。
静的変数 static int a; 宣言されている実行単位ブロック全域で有効。
実行単位終了後に消滅。
コンパイラが0で初期化する。
外部変数 extern int a; 関数の外で宣言されていれば広域的に有効、ただし使用する関数より前で宣言されていること。使用する関数内で外部変数として宣言されていれば、どの関数からも参照できる。
実行単位終了後に消滅しない。
コンパイラが0で初期化する。
レジスタ変数 register int a; 宣言されている実行単位ブロック全域で有効。
実行単位終了後に消滅。
コンパイラは初期化しない。

   この記憶クラスの宣言を省略すると、宣言の位置によってコンパイラが記憶クラス判別をします。関数の外での宣言を静的変数、関数の中での宣言を自動変数とみなします。しかし自分で記憶クラスの宣言をするのが原則です。変数宣言の一般形はつぎのように書きます。

記憶クラス   データ型    変数名  ;

 


「目次へ」