C-scoperegels: Lokale, globale en formele variabelen
Wat is scope?
Scope (bereik) bepaalt waar een variabele zichtbaar en toegankelijk is. C kent drie declaratieplaatsen:
- Lokaal – binnen functie/blok
- Globaal – buiten alle functies
- Formeel parameter – in functiedefinitie
Lokale variabelen
Gedeclareerd in functie/blok. Alleen zichtbaar daar. Levensduur = functie-aanroep. Niet geïnitialiseerd = garbage.
int main() {
int a = 10, b = 20; // lokaal voor main
int c = a + b;
printf("%d\n", c);
return 0;
}
Globale variabelen
Gedeclareerd buiten functies (meestal bovenaan). Zichtbaar in alle functies na declaratie. Levensduur = hele programma. Automatisch geïnitialiseerd op 0/NULL.
#include <stdio.h>
int g = 20; // globaal
int main() {
int g = 10; // lokaal overschaduwt globaal
printf("g = %d\n", g); // print 10
return 0;
}
Formele parameters
Gedragen zich als lokale variabelen in de functie. Overschaduwen globale variabelen met dezelfde naam.
#include <stdio.h>
int a = 20; // globaal
int sum(int a, int b) { // formele parameters
printf("a in sum = %d\n", a); // print parameterwaarde
return a + b;
}
int main() {
int a = 10, b = 20; // lokaal
printf("a in main = %d\n", a); // 10
int c = sum(a, b);
printf("c = %d\n", c); // 30
return 0;
}
Initialisatie
| Type | Standaardwaarde (globaal/static) |
|---|---|
int | 0 |
char | '\0' |
float/double | 0.0 |
| pointer | NULL |
Lokale variabelen worden NIET automatisch geïnitialiseerd! Altijd zelf initialiseren.
Best practices
- Minimaliseer globale variabelen (koppeling, debugging moeilijk)
- Gebruik
staticvoor file-scope globals - Initialiseer altijd lokale variabelen
- Geef duidelijke namen; vermijd naamconflicten lokaal/gloaal
C Taal
- Belangrijkste Regels voor Serie Circuits: Stroom, Weerstand en Spanning
- Parallele Circuit Fundamenten: Spanning, Weerstand en Stroom Regels
- Essentiële Afgeleide Regels: Snelle Referentiehandleiding
- Fundamentele Stamfunctieregels: Constanten, Sommen en Verschillen
- C# Variabelen & Primitive Datatypes onder de knie krijgen: Complete gids
- Variabele Scope in C#: Klasse-, Methode- en Blokniveau
- C++ variabelen, literalen en constanten: een uitgebreide gids
- C Variabelen, Constanten en Literals: Een Complete Gids
- C-opslagklassen begrijpen: Bereik, levensduur en prestaties
- Verilog Timescales begrijpen en printen in elke Scope
- Java-variabelen en literals: een uitgebreide gids