はじめての C

[Learning GNU C]

第9章 記憶クラス storage class

変数の 行動 behavior (範囲) を 変えること。

9.1. 記憶クラスとは なにか?

関数の中の 変数は その関数が 現われるごとに (変数の) 値を 失うことに 気づくだろうが これは 効率の 上から そう なっている。 OS には そのデータが 再度 必要になるか どうかは わからないので プログラムが システムに 戻されると 割り当てた メモリを 解放する。

9.2. auto

初期設定 default では C の 変数に auto 記憶クラスが 使われる。 これは 必要時に 自動的に 変数が つくられるため そう 呼ばれ 領域 scope の 外側では 失効 fall する。

auto 記憶クラスは キーワード auto を 変数の 宣言の 前に つけることで 変数に 指定できるが これは 効果は ない。 このキーワードは 他の 記憶識別子 storage identifier との つりあいのために language に 導入されたものだ。

9.3. static

静的変数 static variable は それが 領域を 抜け出ても 削除されることの ない 変数であり 関数が 呼び出される間は 常に その値を 保持する。 これが 例題だ。

Example 9-1. list_squares.c

#include <stdio.h>

int get_next_square(void);

int
main()
{
int i;

for (i = 0; i < 10; i++)
printf("%6d\n", get_next_square());

printf("and%6d\n", get_next_square());

return 0;
}

int
get_next_square()
{
static int count = -1;

count += 1;

return count * count;
}

これは 0 から 10 までの 数字を 2乗して 表示 list する。 0 から 9 までは ループにより 表示され その後で すぐ 10 の 2乗の 値が 表示される。