Sobes.tech
Junior

Wanneer en hoe lang bestaan globale en lokale variabelen in C++?

sobes.tech AI

Antwoord van AI

Globale variabelen

  • Levensduur: Van het starten van het programma tot het beëindigen.
  • Opslagplaats: Gewoonlijk in het statische geheugengebied (.data of .bss sectie van het uitvoerbare bestand).
  • Initialisatie:
    • Niet-statische globale variabelen, gedefinieerd op bestandsniveau, met niet-triviale constructors, worden geïnitialiseerd vóór de aanroep van main().
    • Globale variabelen met nulinitialisatie (bijvoorbeeld, int i = 0;) worden ook vóór main() geïnitialiseerd.
    • Variabelen gedefinieerd met const of met statische opslagduur worden geladen en geïnitialiseerd bij het laden van het programma.
  • Beschikbaarheid: Zien in alle functies binnen het bereik.

Lokale variabelen

  • Levensduur: Van de definitie van de variabele binnen een codeblok (functie, lus, voorwaarde, etc.) tot het verlaten van dat blok.
  • Opslagplaats: Gewoonlijk op de stack (voor automatische variabelen). Statische lokale variabelen worden opgeslagen in het statische geheugengebied.
  • Initialisatie:
    • Automatische lokale variabelen worden standaard niet geïnitialiseerd (bevatten "rommel"). Vereisen expliciete initialisatie.
    • Statische lokale variabelen worden één keer geïnitialiseerd bij hun eerste definitie.
  • Beschikbaarheid: Alleen zichtbaar binnen het codeblok waarin ze zijn gedefinieerd.

Voorbeelden

// Globale variabele
int global_variable = 10;

void some_function() {
    // Lokale variabele (automatisch)
    int local_variable_1; // Niet geïnitialiseerd

    // Lokale variabele (automatisch) met initialisatie
    int local_variable_2 = 20;

    // Statische lokale variabele
    static int static_local_variable = 30; // Wordt één keer geïnitialiseerd

    // Toegang tot de globale variabele
    global_variable++;

    // Toegang tot lokale variabelen
    local_variable_1 = global_variable;
    static_local_variable++;

    // Na het verlaten van some_function() bestaan local_variable_1 en local_variable_2 niet meer
    // static_local_variable blijft bestaan en behoudt zijn waarde
}

int main() {
    some_function();
    some_function(); // static_local_variable heeft zijn waarde behouden
    // De globale variabele is hier toegankelijk
    // local_variable_1 en local_variable_2 zijn niet toegankelijk

    return 0;
}

Vergelijkingstabel

Kenmerk Globale variabelen Lokale variabelen (automatisch) Statische lokale variabelen
Levensduur Van het starten van het programma tot het einde Van de definitie tot het verlaten van het codeblok Van de eerste bereiking van de definitie tot het einde van het programma
Opslagplaats Statische geheugenruimte (.data, .bss) Stack Statische geheugenruimte (.data, .bss)
Initialisatie Voor het aanroepen van main() of bij het laden van het programma Niet standaard geïnitialiseerd. Vereist expliciete initialisatie Een keer bij de eerste definitie
Beschikbaarheid Overal binnen het bereik van het bestand Alleen binnen het codeblok waarin ze zijn gedefinieerd Alleen binnen het codeblok