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
constili sa statičkim vekom, se inicijalizuju pri učitavanju programa.
- Nestatističke globalne promenljive definisane na nivou fajla, sa složenim konstruktorima, se inicijalizuju pre poziva
- 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 |