Sobes.tech
Junior

Mikor és meddig léteznek a globális és helyi változók C++-ban?

sobes.tech MI

Válasz az MI-től

Globális változók

  • Létezési idő: A program indításától a befejezéséig.
  • Tárolási hely: Általában statikus memória területen (.data vagy .bss szekciók az végrehajtható fájlban).
  • Inicializálás:
    • A fájl szintjén meghatározott nem statikus globális változók, összetett konstruktorokkal, a main() hívása előtt inicializálódnak.
    • A nullára inicializált globális változók (pl. int i = 0;) szintén a main() előtt inicializálódnak.
    • A const-tal vagy statikus élettartammal rendelkező változók a program betöltésekor inicializálódnak.
  • Elérhetőség: Láthatóak minden funkcióban a láthatósági területen belül.

Lokális változók

  • Létezési idő: A változó meghatározásának pillanatától a kódblokk (függvény, ciklus, feltétel stb.) elhagyásáig.
  • Tárolási hely: Általában a veremben (automatikus változók esetén). A statikus lokális változók a statikus memória területen tárolódnak.
  • Inicializálás:
    • Az automatikus lokális változók alapértelmezés szerint nem inicializáltak (szemét értékeket tartalmaznak). Kifejezett inicializálás szükséges.
    • A statikus lokális változók egyszer inicializálódnak az első eléréskor.
  • Elérhetőség: Csak a kódblokkban, ahol meghatározásra kerültek.

Példák

// Globális változó
int global_variable = 10;

void some_function() {
    // Lokális változó (automatikus)
    int local_variable_1; // Inicializálatlan

    // Lokális változó (automatikus) inicializálással
    int local_variable_2 = 20;

    // Statikus lokális változó
    static int static_local_variable = 30; // Egyszer inicializálódik

    // Hozzáférés a globális változóhoz
    global_variable++;

    // Hozzáférés a lokális változókhoz
    local_variable_1 = global_variable;
    static_local_variable++;
}

int main() {
    some_function();
    some_function(); // static_local_variable megtartotta az értékét
    // A globális változó elérhető itt
    // A local_variable_1 és local_variable_2 nem elérhetőek

    return 0;
}

Összehasonlító táblázat

Jellemző Globális változók Lokális változók (automatikus) Statikus lokális változók
Létezési idő A program indításától a befejezéséig A változó meghatározásától a blokk elhagyásáig Az első meghatározásától a program végéig
Tárolási hely Statikus memória terület (.data, .bss) Verem (stack) Statikus memória terület (.data, .bss)
Inicializálás main() hívása előtt vagy a program betöltésekor Alapértelmezés szerint nem inicializált. Kifejezett inicializálás szükséges Egyszer az első eléréskor inicializálódik
Elérhetőség Mindenhol a fájl láthatósági területén Csak a blokkban, ahol meghatározva van Csak a blokkban, ahol meghatározva van