staticとは、C言語での記憶クラス指定子のひとつで宣言したオブジェクトに静的な記憶クラスを与えるものです。staticはスタティックと読みます。記憶クラス指定子には、他にauto, register, extern, typedefがあります。
C言語のstatic指定子について説明しています。staticを使用する場所は関数の中と外の2種類あります。それぞれについて説明します。
staticとは、C言語での記憶クラス指定子のひとつで宣言したオブジェクトに静的な記憶クラスを与えるものです。staticはスタティックと読みます。記憶クラス指定子には、他にauto, register, extern, typedefがあります。
指定子 | 意味 |
---|---|
auto | オブジェクトに自動記憶クラスを与える。関数内でのみ使用可。 |
register | 変数の使用頻度が高いことをコンパイラに知らせる。他はautoと同じ。 |
static | オブジェクトに静的な記憶クラスを与える。関数の中でも外でも使用可。 |
extern | オブジェクト用のメモリが他のどこかで定義されていることを示す。 |
typedef | 型に別名を付ける。構文の便宜上記憶クラス指定子に分類されている。 |
関数の中で局所変数を宣言する際に記憶クラスとしてstaticを与えると、その関数が終了しても消滅せず、値を残すことができます。
static int static_value;
staticな局所変数は定義時に0で初期化されます。普通の局所変数のように関数がコールされた時のみ存在するのではなく、永久に存在します。しかし、外部変数とは異なり、他の関数からは利用できません。セットされた値は関数が終了しても保持され、再び関数がコールされた時には前回の値が残っていて、そのまま利用可能です。
外部変数や関数に対してstaticを使用することもできます。通常外部変数や関数はプログラム全体のどこからでも見えるようになっています。しかし、staticを使って静的な記憶クラスで定義すると、その外部変数や関数はそれが定義されたファイル(モジュール)以外からは参照することができなくなります。変数や関数をファイル内のみで使用し、他に対しては公開したくない場合にこの方法をとります。
static void static_function(void) {
/* 省略 */
}