>> C言語入門トップに戻る
今回はstatic指定子について説明します。
static指定子を変数の前に付加すると、次の効果があります。
・グローバル変数に付けると、他ファイルからアクセスできなくなる
・ローカル変数に付けると、プログラム終了までその変数は消滅しない
・付けた変数はプログラム開始時に0に初期化される
グローバル変数は、その宣言にextern指定子をつけると、他ファイルのグローバル変数にアクセスできますが、
このstatic指定子をつけておけば、その変数の有効範囲がそのファイル内だけに限定されるので、
他ファイルから間違って値が変更されることを防ぐことができます。
また、ローカル変数では、その関数の処理が終わると自動的に消滅しますが、
staticの場合は消滅せず、ずっと値が保持されます。
下記のコードを見てください。
これを実行するとこうなります。

global1というグローバル変数にstatic指定子がついています。
こうすることでこの変数はこのファイルないだけに限定されるため、他ファイルからはアクセスできなくなります。
次にfunc関数内の、global2という変数を見て下さい。
関数内にあるためローカル変数ですが、static指定子が付いています。
これによってこの変数は消滅せず値が保持されます。
その証拠に、最初にfunc関数に5を渡して、値を足した後に、
再度10を渡して呼び出していますが、その後の表示では5+10を足した15が表示されています。
これを見ても分かるように、
最初に0に初期化されていること、また、値が保持され続けていることが分かります。
これらがstatic指定子の効果です。
わかりましたでしょうか?
>> 【ポインタのポインタ】に進む
>> C言語入門トップに戻る
static指定子
static指定子を変数の前に付加すると、次の効果があります。
・グローバル変数に付けると、他ファイルからアクセスできなくなる
・ローカル変数に付けると、プログラム終了までその変数は消滅しない
・付けた変数はプログラム開始時に0に初期化される
グローバル変数は、その宣言にextern指定子をつけると、他ファイルのグローバル変数にアクセスできますが、
このstatic指定子をつけておけば、その変数の有効範囲がそのファイル内だけに限定されるので、
他ファイルから間違って値が変更されることを防ぐことができます。
また、ローカル変数では、その関数の処理が終わると自動的に消滅しますが、
staticの場合は消滅せず、ずっと値が保持されます。
下記のコードを見てください。
#include <stdio.h> //この変数には他ファイルからはアクセスできない。 static int global1; int func(int); int main(void) { int result; result=func(5); printf("%d\n",result); result=func(10); printf("%d\n",result); return 0; } int func(int tmp){ //static指定子をつけた変数 static int global2; global2+=tmp; return global2; }
これを実行するとこうなります。

global1というグローバル変数にstatic指定子がついています。
こうすることでこの変数はこのファイルないだけに限定されるため、他ファイルからはアクセスできなくなります。
次にfunc関数内の、global2という変数を見て下さい。
関数内にあるためローカル変数ですが、static指定子が付いています。
これによってこの変数は消滅せず値が保持されます。
その証拠に、最初にfunc関数に5を渡して、値を足した後に、
再度10を渡して呼び出していますが、その後の表示では5+10を足した15が表示されています。
これを見ても分かるように、
最初に0に初期化されていること、また、値が保持され続けていることが分かります。
これらがstatic指定子の効果です。
わかりましたでしょうか?
>> 【ポインタのポインタ】に進む
>> C言語入門トップに戻る