静的変数 | Programming Place Plus 用語集

トップページ用語集

名称

解説

プログラム実行開始から終了までのあいだ、メモリ上に存在し続けており、を失わない変数のことです。

プログラミング言語によって異なる呼び方をする場合があります。また、ソースコード上でどのように表現するかにも違いがあります。

多くの場合、通常ならば関数呼び出しごとに生存と破棄が繰り返されるローカル変数自動変数)に対して、なんらかの指定によって、生存期間をプログラムの実行開始から終了までに変更されたものを指します。そのほか、(プログラミング言語の仕様によるが)グローバル変数クラス変数のように、プログラムの実行開始から終了まで存在することが仕様上当然である場合にも、静的変数と呼ぶことがあります。

C言語の場合

C言語では、静的記憶域期間という用語で表現されます(「静的記憶域期間をもつ変数」のように)。

通常のローカル変数の宣言に対して、static指定子を付加すると、静的記憶域期間をもつ変数になります(C言語編第24章)。

void func(void)
{
    static int count = 0;  // 静的記憶域期間をもつ変数。
                           // プログラムの実行開始から終了まで存在しており、関数を抜けても値を失わない

    ++count;
}

また、グローバル変数はつねに静的記憶域期間を持っています。グローバル変数の宣言に対しても static指定子を付加できますが、これは内部結合にすることをあらわすものです(C言語編第24章)。

C言語では、「ローカル変数」や「グローバル変数」も規格上は登場しない用語です。ここでの用法では、前者は「自動記憶域期間をもつ変数」ということになります。後者は簡潔な呼び名がないので一般的に「グローバル変数」や「大域変数」と呼ばれます。

C++ の場合

C++ も、C言語と基本的に同じですが、static指定子を付加して宣言されたローカル変数に関して、明示的に初期化子を記述しておこなう初期化のタイミングは、実際にその変数を宣言している箇所が実行されるときに変更されています。

いずれにせよ、静的記憶域期間をもつ場合、プログラム実行開始時点でゼロ初期化が行われるため、まず 0 によって初期化されていることが保証されます。宣言箇所を通過するときに、明示的に与えた初期化子や、コンストラクタによる初期化があらためて行われます。


参考リンク

更新履歴


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る