In C kunnen variabelen verschillende scopes hebben: lokaal (binnen een blok), globaal (in het hele bestand) en scope binnen het bestand (static). Juiste beheersing van scopes is belangrijk voor voorspelbaarheid van het gedrag en het voorkomen van naamconflicten.
Zichtbaar in alle functies van het bestand, en als ze met extern zijn gedeclareerd — in het hele project.
Worden aangemaakt bij binnenkomst in het blok (bijvoorbeeld, functie of lus). Niet zichtbaar buiten het blok van de declaratie.
static int foo; — alleen voor het huidige bestand.
Voorbeeld:
static int counter = 0; // Alleen binnen het bestand void increment() { int temp = 10; // lokale variabele ++counter; }
Als globale en lokale variabelen dezelfde naam hebben, welke wordt er dan gebruikt binnen de functie en waarom?
Antwoord: De lokale wordt gebruikt, omdat deze de globale naam "verbergt" (shadowing) binnen zijn scope. De globale variabele blijft toegankelijk buiten het blok waar de lokale variabele is gedeclareerd.
Voorbeeld:
int value = 5; void foo() { int value = 10; printf("%d", value); // geeft 10 weer, niet 5 }
Verhaal
Verhaal
static te specificeren voor een hulpfunctie en variabele, wat leidde tot naamconflicten bij het linken, evenals onvoorspelbare fouten bij het samenstellen van verschillende delen van het project.Verhaal
Er zijn gevallen geweest waarin globale variabelen werden gebruikt in multithreaded code zonder de juiste synchronisatie. Door impliciete scopes en onoplettendheid bij het wijzigen van waarden in verschillende threads ontstonden er dataraces.