Sobes.tech
Junior

Kedy a ako dlho existujú globálne a lokálne premenné v C++?

sobes.tech AI

Odpoveď od AI

Globálne premenné

  • Doba existencie: Od spustenia programu do jeho ukončenia.
  • Miesto uloženia: Zvyčajne v statickej oblasti pamäti (.data alebo .bss sekcie spustiteľného súboru).
  • Inicializácia:
    • Nestatické globálne premenné definované na úrovni súboru, s komplexnými konštruktormi, sa inicializujú pred volaním main().
    • Premenné s nulovou inicializáciou (napríklad int i = 0;) sa tiež inicializujú pred main().
    • Premenné definované s const alebo so statickým trvaním sa inicializujú pri načítaní programu.
  • Dostupnosť: Viditeľné vo všetkých funkciách v rámci oblasti viditeľnosti.

Lokálne premenné

  • Doba existencie: Od definície premennej v rámci bloku kódu (funkcia, slučka, podmienka atď.) do opustenia tohto bloku.
  • Miesto uloženia: Zvyčajne na zásobníku (pre automatické premenné). Statické lokálne premenné sú uložené v statickej oblasti pamäti.
  • Inicializácia:
    • Automatické lokálne premenné nie sú predvolene inicializované (obsahujú "neporiadok"). Vyžadujú explicitnú inicializáciu.
    • Statické lokálne premenné sa inicializujú raz pri prvom dosiahnutí.
  • Dostupnosť: Viditeľné iba v rámci bloku kódu, kde sú definované.

Príklady

// Globálna premenná
int global_variable = 10;

void some_function() {
    // Lokálna premenná (automatická)
    int local_variable_1; // Bez inicializácie

    // Lokálna premenná (automatická) s inicializáciou
    int local_variable_2 = 20;

    // Statická lokálna premenná
    static int static_local_variable = 30; // Inicializuje sa raz

    // Prístup ku globálnej premennej
    global_variable++;

    // Prístup k lokálnym premenným
    local_variable_1 = global_variable;
    static_local_variable++;
}

int main() {
    some_function();
    some_function(); // static_local_variable si zachovala hodnotu
    // Globálna premenná je dostupná tu
    // local_variable_1 a local_variable_2 nie sú dostupné

    return 0;
}

Porovnávacia tabuľka

Charakteristika Globálne premenné Lokálne premenné (automatické) Statické lokálne premenné
Doba existencie Od spustenia programu do jeho ukončenia Od definície do opustenia bloku kódu Od prvého dosiahnutia do ukončenia programu
Miesto uloženia Statická oblasť pamäti (.data, .bss) Zásobník (stack) Statická oblasť pamäti (.data, .bss)
Inicializácia Pred volaním main() alebo pri načítaní programu Neinicializované predvolene. Vyžaduje sa explicitná inicializácia Raz pri prvom dosiahnutí
Dostupnosť Viditeľné všade v oblasti viditeľnosti súboru Len v rámci bloku, kde sú definované Len v rámci bloku, kde sú definované