Heim >Backend-Entwicklung >C++ >Wann werden statische Variablen auf Funktionsebene in C initialisiert?

Wann werden statische Variablen auf Funktionsebene in C initialisiert?

Linda Hamilton
Linda HamiltonOriginal
2024-11-15 09:39:03343Durchsuche

When are function-level static variables in C   initialized?

Initialisierung statischer Variablen auf Funktionsebene

In C sind statische Variablen auf Funktionsebene ein nützlicher Mechanismus zur Aufrechterhaltung des Zustands innerhalb von Funktionen. Ihr Zuordnungs- und Initialisierungsprozess wirft jedoch manchmal Fragen auf.

Im Gegensatz zu global deklarierten Variablen, die beim Programmstart zugewiesen und initialisiert werden, werden statische Variablen auf Funktionsebene erst zugewiesen oder initialisiert, wenn die Funktion zum ersten Mal aufgerufen wird .

Bedenken Sie den folgenden Codeausschnitt:

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

In diesem Beispiel wird die statische Variable globalish erst zugewiesen oder initialisiert die Funktion doSomething() wird aufgerufen. Um dies zu demonstrieren, analysieren wir ein Testprogramm:

#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;
}

Bei der Kompilierung und Ausführung zeigt die Ausgabe, dass der Konstruktor für die statische Variable t in der Funktion f() erst aufgerufen wird, wenn die Funktion für aufgerufen wird Zum ersten Mal:

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

Daher werden statische Variablen auf Funktionsebene nicht beim Programmstart zugewiesen oder initialisiert, sondern beim ersten Aufruf der Funktion, in der sie sich befinden definiert.

Das obige ist der detaillierte Inhalt vonWann werden statische Variablen auf Funktionsebene in C initialisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn