Sobes.tech
Junior

Када и колико дуго постоје глобалне и локалне променљиве у C++?

sobes.tech АИ

Одговор од АИ

Globalne promenljive

  • Vreme postojanja: Od pokretanja programa do njegovog završetka.
  • Mesto skladištenja: Obično u statičkoj oblasti memorije (.data ili .bss sekcije izvršnog fajla).
  • Inicijalizacija:
    • Nestatističke globalne promenljive definisane na nivou fajla, sa složenim konstruktorima, se inicijalizuju pre poziva main().
    • Promenljive sa nulom (npr. int i = 0;) takođe se inicijalizuju pre main().
    • Promenljive definisane sa const ili sa statičkim vekom, se inicijalizuju pri učitavanju programa.
  • Dostupnost: Vidljive u svim funkcijama unutar oblasti vidljivosti.

Lokalni promenljive

  • Vreme postojanja: Od definicije promenljive unutar bloka koda (funkcija, petlja, uslovni operator itd.) do izlaska iz tog bloka.
  • Mesto skladištenja: Obično na steku (za automatske promenljive). Statičke lokalne promenljive se skladište u statičkoj oblasti memorije.
  • Inicijalizacija:
    • Automatske lokalne promenljive nisu inicijalizovane po defaultu (sadrže "smeće"). Zahtevaju eksplicitnu inicijalizaciju.
    • Statičke lokalne promenljive se inicijalizuju jednom pri prvom dostizanju.
  • Dostupnost: Vidljive samo unutar bloka koda gde su definisane.

Primeri

// Globalna promenljiva
int global_variable = 10;

void some_function() {
    // Lokalna promenljiva (automatska)
    int local_variable_1; // Bez inicijalizacije

    // Lokalna promenljiva (automatska) sa inicijalizacijom
    int local_variable_2 = 20;

    // Statička lokalna promenljiva
    static int static_local_variable = 30; // Inicijalizuje se jednom

    // Pristup globalnoj promenljivoj
    global_variable++;

    // Pristup lokalnim promenljivima
    local_variable_1 = global_variable;
    static_local_variable++;
}

int main() {
    some_function();
    some_function(); // static_local_variable sačuvala je vrednost
    // Globalna promenljiva je dostupna ovde
    // local_variable_1 i local_variable_2 nisu dostupne

    return 0;
}

Tabela poređenja

Karakteristika Globalne promenljive Lokalni promenljive (automatske) Statičke lokalne promenljive
Vreme postojanja Od pokretanja programa do njegovog završetka Od definicije do izlaska iz bloka koda Od prvog dostizanja do završetka programa
Mesto skladištenja Statička oblast memorije (.data, .bss) Stek Statička oblast memorije (.data, .bss)
Inicijalizacija Pre poziva main() ili pri učitavanju programa Ne inicijalizuje se po defaultu. Zahteva eksplicitnu inicijalizaciju Jednom pri prvom dostizanju
Dostupnost Vidljive svuda u oblasti vidljivosti fajla Samo unutar bloka gde su definisane Samo unutar bloka gde su definisane