宣言
static宣言
static宣言は変数宣言や関数定義の前に「static」記述をして使用します。
staticを使用した変数や関数は使用できる範囲や保存期間が変更されます。
書式
static変数書式例
static 型名 変数名;
static関数書式例
static 戻り値の型 関数名(引数);
static 戻り値の型 関数名(引数)
{
return 戻り値;
}
具体例
static void CountUp(int num)
{
static int count = 0;
count += num;
printf("num = %d\n", count);
}
int main(void)
{
CountUp(10);
CountUp(30);
return 0;
}
実行結果:
num = 10
num = 40
static変数の特性
static変数の特性は以下の通りです。
ローカル変数の値保持期間の変更
具体例でも使用していますが、
staticを使用したローカル変数は保存期間が変更されて、
関数が終了した後も値を保持し続けます。
グローバル変数の有効範囲の変更
グローバル変数に設定した場合ですが、
有効範囲が変更されてソースファイル内でしか使用できなくなります。
別のソースファイルでexternを設定しても使用することはできません。
static関数
static関数の特性は以下の通りです。
使用範囲の制限
staticを使用した関数を使用できる範囲は
関数を定義したソースファイル内だけになります。
ですので、ヘッダファイルにプロトタイプ宣言をしたとしても
他のソースファイルでstatic関数を呼び出すことはできません。
const宣言
const宣言は変数宣言の前に「const」を記述して使用します。
const宣言の効果は宣言した変数を定数として扱います。
つまり、初期化後の値変更が不可能になるということです。
書式
書式例
const 変数の型 変数名 = 値;
変数の型 const 変数名 = 値;
具体例
const int const_val = 10;
constは宣言後に変更を行うことができませんので、
宣言時に必ず初期化を行う必要があります。
ポインタのconst宣言
ポインタのconst宣言はポインタの値(アドレス)を定数化する書式と
ポインタの指す値の変更を禁止する書式の2つがあります。
ポインタの格納している値の定数化
書式例
型名 * const 変数名 = 値(アドレス);
内容
ポインタに格納している値(アドレス)を定数として扱います。
値(アドレス)を通してポインタの指す値の変更は可能です。
ポインタの指す値の変更禁止
書式
const 型名 *変数名;
型名 const *変数名;
内容
ポインタに格納している値(アドレス)を通して
ポインタの指す値を書き換えることを禁止します。
値(アドレス)自体の変更は可能です。
この二つの書式は同時に使用することも可能です。
その場合、ポインタの指す値の参照のみ可能となります。