📘 Kapitel 4 · Funktionen & Strukturierung

Lokale vs.
globale Variablen

Scope · Gültigkeitsbereich · Shadowing · Best Practices

18 / 30 Units
Ömer
Kapitel 4: Funktionen & Strukturierung ~45 Min. Theorie + Simulator + Quiz + Spickzettel
Ömer
Ömer sagt:

Scope – wo eine Variable lebt. Lokal ist fast immer besser als global. Globale Variablen sind wie geteilte Schubladen: jeder greift rein und keiner weiß was drin ist!

Lokale Variablen

Nur in ihrer Funktion sichtbar

Lokale Variablen werden innerhalb einer Funktion deklariert. Sie existieren nur während der Ausführung dieser Funktion.

Globale Variablen

Außerhalb aller Funktionen – überall sichtbar

Globale Variablen sind in allen Funktionen lesbar und schreibbar. Das macht sie gefährlich: Jede Funktion kann sie verändern, ohne dass andere es erwarten.

scope.cC
int global = 10;         // GLOBAL
void zeige() {
    int lokal = 5;        // LOKAL – nur in zeige()
    printf("%d %d\n", global, lokal);
}
int main() {
    printf("%d\n", global);  // OK
    // printf("%d", lokal);   FEHLER – nicht sichtbar!
}

Faustregel

TypEmpfehlungWarum?
Lokal✅ Immer bevorzugenKlar, sicher, testbar
Global⚠️ Nur wenn nötigJeder kann es verändern
Global const✅ OK für Konstantenconst int MAX = 100;

Gültigkeitsbereiche – Visualisierung

VariableTypWo deklariertLebt bisSichtbar in
int x in main()lokalinnerhalb mainmain endetnur main()
int i in for(...)lokal (Block)im for-BlockBlock endetnur der for-Block
int global = 0;globalaußerhalb aller FunktionenProgrammendeüberall
static int cntstaticinnerhalb FunktionProgrammendenur die Funktion

Häufige Fehler

Warnung: Typische Scope-Fehler

  • Lokale Variable nicht initialisiert: int x; printf("%d", x); – x enthält einen zufälligen Wert (Garbage Value). Immer initialisieren!
  • Globale Variable aus Versehen überschreiben (Shadowing): Eine lokale Variable mit dem gleichen Namen wie eine globale Variable verdeckt die globale – innerhalb der Funktion wird die lokale verwendet, was zu unerwartetem Verhalten führt.
  • Variable außerhalb ihres Blocks referenzieren: Eine Variable die in einem if- oder for-Block deklariert wurde, ist außerhalb nicht sichtbar – Compilerfehler.

⚡ Code-Simulator

Schreibe eigene Funktionen und teste sie – der Simulator zeigt printf-Ausgaben:

C Simulator – Unit 18 – Funktionen
▶ Ausgabe
– Klicke AUSFÜHREN –
Ömer
Ömer sagt:

Schreibe eigene Funktionen und ändere die Argumente beim Aufruf. So siehst du direkt wie Funktionen Daten verarbeiten!

🎯 Wissens-Quiz

Frage 1
Wo werden lokale Variablen deklariert?
AAußerhalb aller Funktionen
BInnerhalb einer Funktion
CIn der main()-Zeile
DIm #include-Bereich
Frage 2
Was ist der Gültigkeitsbereich einer globalen Variable?
ANur in main()
BNur in der Funktion wo sie deklariert ist
CIn allen Funktionen des Programms
DNur in Schleifen
Frage 3
Warum sollte man globale Variablen vermeiden?
ASie sind zu langsam
BJede Funktion kann sie verändern – schwer zu debuggen
CSie brauchen mehr Speicher
DDer Compiler erlaubt es nicht
Frage 4
Was ist 'Shadowing'?
AEine globale Variable löschen
BEine lokale Variable hat denselben Namen wie eine globale
CEine Funktion verstecken
DEinen Wert verdoppeln
Frage 5
Welche Variable-Deklaration ist immer sichtbar?
Aint x = 5; innerhalb von main()
Bint x = 5; innerhalb von zeige()
Cint x = 5; vor allen Funktionen
Dint x = 5; in einer Schleife
Frage 6
Was ist "Variable Shadowing"?
AEine Variable die nie benutzt wird
BEine Variable die automatisch 0 ist
CLokale Variable verdeckt globale Variable mit demselben Namen
DEine konstante globale Variable
Frage 7
Was ist der Wert einer nicht initialisierten lokalen Variable?
AImmer 0
BImmer -1
CCompilerfehler
DUndefiniert (Garbage Value)
Frage 8
Was ist eine static-Variable in einer Funktion?
ABehält ihren Wert zwischen Funktionsaufrufen (lebt bis Programmende)
BWird bei jedem Aufruf auf 0 zurückgesetzt
CIst dasselbe wie eine globale Variable
DKann nicht verändert werden

📋 Spickzettel

Scope-Regeln
LokalNur in der Funktion
GlobalÜberall im Programm
Lebensdauer lokalWährend der Funktion
Lebensdauer globalGesamte Laufzeit
Best Practices
Lokal bevorzugenSicherer!
Global vermeidenSchwer zu debuggen
const int MAXFür Konstanten OK
Per ParameterWerte übergeben

✅ Checkliste Unit 18

  • Ich kenne den Unterschied zwischen lokalen und globalen Variablen
  • Ich verstehe warum globale Variablen problematisch sind
  • Ich erkenne Shadowing
  • Ich bevorzuge lokale Variablen und übergebe Werte als Parameter