Sobes.tech
Junior

Wann und wie lange existieren globale und lokale Variablen in C++?

sobes.tech KI

Antwort von AI

Globale Variablen

  • Lebensdauer: Vom Start des Programms bis zu seinem Ende.
  • Speicherort: Normalerweise im statischen Speicherbereich (.data oder .bss Sektion der ausführbaren Datei).
  • Initialisierung:
    • Nicht-statische globale Variablen, die auf Fachebene definiert sind, mit nicht-trivialen Konstruktoren, werden vor dem Aufruf von main() initialisiert.
    • Globale Variablen mit Nullinitialisierung (z.B. int i = 0;) werden ebenfalls vor main() initialisiert.
    • Mit const deklarierte Variablen oder solche mit statischer Speicherdauer werden beim Laden des Programms initialisiert.
  • Verfügbarkeit: Sind in allen Funktionen im Gültigkeitsbereich sichtbar.

Lokale Variablen

  • Lebensdauer: Vom Zeitpunkt der Deklaration innerhalb eines Codeblocks (Funktion, Schleife, Bedingung usw.) bis zum Verlassen dieses Blocks.
  • Speicherort: Normalerweise im Stack (für automatische Variablen). Statische lokale Variablen werden im statischen Speicherbereich gespeichert.
  • Initialisierung:
    • Automatische lokale Variablen werden standardmäßig nicht initialisiert (enthalten "Müll"). Erfordern eine explizite Initialisierung.
    • Statische lokale Variablen werden einmal bei ihrer ersten Deklaration initialisiert.
  • Verfügbarkeit: Nur innerhalb des Codeblocks sichtbar, in dem sie definiert sind.

Beispiele

// Globale Variable
int global_variable = 10;

void some_function() {
    // Lokale Variable (automatisch)
    int local_variable_1; // Nicht initialisiert

    // Lokale Variable (automatisch) mit Initialisierung
    int local_variable_2 = 20;

    // Statische lokale Variable
    static int static_local_variable = 30; // Wird einmal initialisiert

    // Zugriff auf die globale Variable
    global_variable++;

    // Zugriff auf lokale Variablen
    local_variable_1 = global_variable;
    static_local_variable++;

    // Nach Verlassen von some_function() hören local_variable_1 und local_variable_2 auf zu existieren
    // static_local_variable existiert weiterhin und behält seinen Wert
}

int main() {
    some_function();
    some_function(); // static_local_variable hat seinen Wert behalten
    // Globale Variable ist hier zugänglich
    // local_variable_1 und local_variable_2 sind nicht zugänglich

    return 0;
}

Vergleichstabelle

Merkmal Globale Variablen Lokale Variablen (automatisch) Statische lokale Variablen
Lebensdauer Vom Programmstart bis zum Ende Vom Zeitpunkt der Deklaration bis zum Verlassen des Blocks Vom ersten Erreichen der Deklaration bis zum Ende des Programms
Speicherort Statischer Speicherbereich (.data, .bss) Stack Statischer Speicherbereich (.data, .bss)
Initialisierung Vor dem Aufruf von main() oder beim Laden des Programms Nicht standardmäßig initialisiert. Erfordert explizite Initialisierung Einmal bei der ersten Deklaration
Verfügbarkeit Überall im Gültigkeitsbereich der Datei Nur innerhalb des Codeblocks Nur innerhalb des Codeblocks