
【6日でできるC言語入門】記憶クラス
C言語の「記憶クラス(ストレージクラス)」は、変数がどの記憶領域に格納されるかや、変数の有効範囲・生存期間を決定する大切な仕組みです。
普段何気なく使っているローカル変数やグローバル変数も、実は記憶クラスによって性質が大きく異なります。
ここでは、代表的な3つの記憶クラス(自動変数・外部変数・静的変数)を中心に、表や具体例、図を使いながら分かりやすく解説します。

1.記憶クラスの概要
1.1. 記憶クラスとは
C言語の変数は、「どこに格納されるか」「どこから参照できるか」「いつ値が消えるか」という性質(記憶クラス)によって分類されます。
主な記憶クラスは以下の3種類です。
| 記憶クラス | 主な指定子 | 記憶領域 | 有効範囲 | 初期値 |
|---|---|---|---|---|
| 自動変数 | auto(省略可) | スタック領域 | 関数内 | 不定値 |
| 外部変数 | (なし) | 静的領域 | プログラム全体 | 0 |
| 静的変数 | static | 静的領域 | 宣言した関数内等 | 0 |
1.2. 記憶クラスのイメージ

2.各記憶クラスの特徴と使い方
2.1. 自動変数(ローカル変数)
- 関数内部で宣言される変数
- 通常「auto」指定子は省略される。
- 関数の呼び出し時に生成、終了時に消滅
- スタック領域に格納される。
プロジェクト/ファイル名: Lesson63_1/main.c
#include <stdio.h>
int main(void) {
auto int x = 50; // 「auto」は通常省略される
printf("自動変数xの値は%dです。\n", x);
return 0;
}実行結果
自動変数xの値は50です。解説
- 「auto」を付けても付けなくても同じ意味
- 通常のローカル変数=自動変数
2.2. 外部変数(グローバル変数)
- 関数の外側で宣言する変数
- プログラム全体からアクセス可能
- 静的領域に格納
- 初期化しない場合は自動的に「0」で初期化される。
プロジェクト/ファイル名: Lesson63_2/main.c
#include <stdio.h>
int global_count = 5; // 外部変数
void print_count() {
printf("外部変数global_countの値は%dです。\n", global_count);
}
int main(void) {
printf("main関数: global_count=%d\n", global_count);
print_count();
return 0;
}実行結果
main関数: global_count=5
外部変数global_countの値は5です。解説
- 関数間で値を共有したい場合に便利
- 初期値を省略すると「0」になる。
2.3. 静的変数(static変数)
- 「static」指定子で宣言
- ローカル変数として宣言しても、関数の呼び出しごとに値が保存される。
- 静的領域に格納
プロジェクト/ファイル名: Lesson63_3/main.c
#include <stdio.h>
void count_up() {
static int counter = 1; // 静的変数
printf("counterの値は%dです。\n", counter);
counter++;
}
int main(void) {
count_up();
count_up();
return 0;
}実行結果
counterの値は1です。
counterの値は2です。解説
- 静的変数は関数を抜けても値が保持される。
- 初期化はプログラム起動時に1度だけ
3.その他の記憶クラス
3.1. register指定子
- CPUレジスタを使って高速化を試みる指定子
- 実際は最適化の程度は処理系依存
例
register int r = 10;3.2. extern指定子
- 外部ファイルの変数を参照する場合に使う
例
extern int global_count;まとめ
- 記憶クラスは「変数がどこに格納され、どの範囲で使えるか」を決定する重要な仕組み。
- 主なクラスは「自動変数」「外部変数」「静的変数」
- それぞれの違いを理解して使い分けることで、より安全で効率的なプログラミングが可能
C言語の記憶クラスをマスターして、メモリの使い方をもっと賢く、自在にコントロールしましょう。
