static {データ型} {変数名}
静的ローカル変数
関数内の変数が静的である場合、変数は関数呼び出し間でその値を保持します。
//Example1.c
#含む
intfun1(()。
{{
intカウント=0;
カウント++;
戻るカウント;
}
intfun2(()。
{{
静的 intカウント=0;
カウント++;
戻るカウント;
}
int主要(()。
{{
printf (('fun1最初の呼び出しは次を返します:%dNS'、fun1(()。)。;
printf (('fun1 2番目の呼び出しは次を返します:%dNSNS'、fun1(()。)。;
printf (('fun2最初の呼び出しは次を返します:%dNS'、fun2(()。)。;
printf (('fun2 2番目の呼び出しは次を返します:%dNS'、fun2(()。)。;
戻る 0;
}
例1.cには、次の2つの関数があります。 fun1() と fun2() 。の fun1() 、1つの変数(count)を宣言し、それを0に初期化します。次に、count変数をインクリメントし、結果の値を返します。使用する 主要() 、私たちは fun1() 2回、毎回、への呼び出し時にカウント変数がクリアされるため、値1が返されます。 fun1() 完成されました。の fun2() count変数を静的変数として宣言しました。したがって、その値は保持されます。使用する 主要() 、私たちは fun2() 2回:1回目は値1が返され、2回目は値2が返されます。
静的グローバル変数
静的グローバル変数は他のグローバル変数と同じように動作しますが、別のCプログラムからアクセスすることはできません。
静的関数
Cでは、関数はデフォルトでグローバルです。ただし、静的関数を宣言すると、その関数はローカルであり、別のCプログラムからアクセスすることはできません。
静的変数の初期化
静的変数が明示的に初期化されていない場合は、0として初期化されます。
//Example2.c
#含む
int主要(()。
{{
静的 int私;
printf (('iの値:%dNS'、私)。;
戻る 0;
}
Example2.cでは、初期化されていない静的変数iを宣言しました。ただし、変数は静的であるため、自動的に0に初期化されます。
静的変数は定数リテラルで初期化する必要があることに注意することが重要です。関数の戻り値を使用して静的変数を初期化することはできません。
//Example3.c#含む
intfun1(()。
{{
戻る 5;
}
int主要(()。
{{
静的 int私=fun1(()。;
printf (('iの値:%dNS'、私)。;
戻る 0;
}
Example3.cでは、の戻り値を使用して静的変数を初期化しようとします。 fun1() 。ただし、ご覧のとおり、コードのコンパイル時にエラーが返されます。
概要
静的変数の存続期間とプログラムの存続期間は同じです。
静的変数が初期化されていない場合、デフォルト値の0になります。
グローバル静的変数も静的関数も、それが定義されたプログラム以外のプログラムからはアクセスできません。