ホームページ  >  記事  >  バックエンド開発  >  C の関数レベルの静的変数はいつ初期化されますか?

C の関数レベルの静的変数はいつ初期化されますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-15 09:39:03257ブラウズ

When are function-level static variables in C   initialized?

関数レベルの静的変数の初期化

C では、関数レベルの静的変数は関数内の状態を維持するための便利なメカニズムです。ただし、割り当てと初期化のプロセスには疑問が生じることがあります。

プログラムの開始時に割り当てられ初期化されるグローバルに宣言された変数とは異なり、関数レベルの静的変数は、関数が初めて呼び出されるまで割り当ても初期化もされません。 .

次のコード スニペットを考えてみましょう:

void doSomething()
{
  static bool globalish = true;
  // ...
}

この例では、静的変数 globalish は割り当てられません。または関数 doSomething() が呼び出されるまで初期化されます。これを実証するために、テスト プログラムを分析してみましょう。

#include <iostream>

class test
{
public:
  test(const char *name) : _name(name)
  {
    std::cout << _name << " created" << std::endl;
  }

  ~test()
  {
    std::cout << _name << " destroyed" << std::endl;
  }

  std::string _name;
};

test t("global variable");

void f()
{
  static test t("static variable");
  test t2("Local variable");

  std::cout << "Function executed" << std::endl;
}

int main()
{
  test t("local to main");

  std::cout << "Program start" << std::endl;

  f();

  std::cout << "Program end" << std::endl;
  return 0;
}

コンパイルして実行すると、関数 f() の静的変数 t のコンストラクターは、その関数が呼び出されるまで呼び出されないことが出力からわかります。初回:

global variable created
local to main created
Program start
static variable created
Local variable created
Function executed
Local variable destroyed
Program end
local to main destroyed
static variable destroyed
global variable destroyed

したがって、関数レベルの静的変数はプログラムの開始時ではなく、最初の呼び出し時に割り当てまたは初期化されます。それらが定義されている関数の。

以上がC の関数レベルの静的変数はいつ初期化されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。