Sobes.tech
Junior

Când și pentru cât timp există variabilele globale și locale în C++?

sobes.tech AI

Răspuns de la AI

Variabile globale

  • Durata de viață: De la pornirea programului până la finalizarea acestuia.
  • Locul de stocare: De obicei în zona de memorie statică (.data sau secțiunea .bss a fișierului executabil).
  • Inițializare:
    • Variabilele globale non-statice, definite la nivel de fișier, cu constructori ne-triviali, sunt inițializate înainte de apelul main().
    • Variabilele globale cu inițializare zero (de exemplu, int i = 0;) sunt, de asemenea, inițializate înainte de main().
    • Variabilele definite cu const sau cu durată de viață statică sunt inițializate la încărcarea programului.
  • Disponibilitate: Sunt vizibile în toate funcțiile din cadrul domeniului.

Variabile locale

  • Durata de viață: De la definirea variabilei în interiorul unui bloc de cod (funcție, buclă, condiție etc.) până la ieșirea din acel bloc.
  • Locul de stocare: De obicei pe stivă (pentru variabile automate). Variabilele locale statice sunt stocate în zona de memorie statică.
  • Inițializare:
    • Variabilele locale automate nu sunt inițializate implicit (conțin "mizerie"). Necesită inițializare explicită.
    • Variabilele locale statice sunt inițializate o singură dată la prima lor declarație.
  • Disponibilitate: Vizibile doar în interiorul blocului de cod în care sunt definite.

Exemple

// Variabilă globală
int global_variable = 10;

void some_function() {
    // Variabilă locală (automată)
    int local_variable_1; // Neinițializată

    // Variabilă locală (automată) cu inițializare
    int local_variable_2 = 20;

    // Variabilă locală statică
    static int static_local_variable = 30; // Se inițializează o dată

    // Acces la variabila globală
    global_variable++;

    // Acces la variabilele locale
    local_variable_1 = global_variable;
    static_local_variable++;

    // După ieșirea din some_function(), local_variable_1 și local_variable_2 încetează să mai existe
    // static_local_variable continuă să existe și păstrează valoarea
}

int main() {
    some_function();
    some_function(); // static_local_variable și-a păstrat valoarea
    // Variabila globală este disponibilă aici
    // local_variable_1 și local_variable_2 nu sunt accesibile

    return 0;
}

Tabel comparativ

Caracteristică Variabile globale Variabile locale (automate) Variabile locale statice
Durata de viață De la pornirea programului până la finalizare De la definire până la ieșirea din blocul de cod De la prima atingere a definiției până la finalul programului
Locul de stocare Zona de memorie statică (.data, .bss) Stivă Zona de memorie statică (.data, .bss)
Inițializare Înainte de apelul main() sau la încărcarea programului Nedeclarată implicit. Necesită inițializare explicită O dată la prima declarație
Disponibilitate Oriunde în domeniul fișierului Doar în interiorul blocului de cod Doar în interiorul blocului de cod