Variablen vertiefend I
Du hast Schwierigkeiten mit der Ausgabe und Fehlern in C? Im folgenden Beitrag erklären wir dir mögliche Ursachen dafür.
Inhaltsübersicht
Sichtbarkeit, Definitionsart und -ort
Um diese Fehler beheben zu können, musst du als erstes wissen, was es mit Variablen auf sich hat. Zuerst einmal können Variablen nicht nur verschiedene Typen, sondern auch unterschiedliche Sichtbarkeiten aufweisen. Das bedeutet: Variablen sind nicht automatisch im ganzen Programm nutzbar, nur weil wir sie irgendwo definiert haben. Die Orte, an denen wir unsere Variable verwenden können, hängen von der Definitionsart, vor allem aber vom Definitionsort ab. Der Gültigkeitsbereich einer Variablen liegt immer zwischen zwei zusammengehörigen geschweiften Klammern.
Das kannst du ganz gut sehen, wenn wir dieses Programm einmal kompilieren. Du wirst von deinem Compiler nämlich von Fehlermeldungen und Warnungen überhäuft.
Setzen wir nun aber die Ausgabe in die Klammern oder lassen diese einfach weg, compiliert das Programm ohne Probleme.
Anweisungsblöcke oder Compound Statements
Das zeigt uns ganz eindeutig, dass Variablen immer nur in einem Anweisungsblock gültig sind. Diese „Blöcke“ nennt man auch „compound statements“. Du kannst sie maximal 15-fach verschachteln, aber das Limit sollte für nahezu alle Programme ausreichend sein. Dies gilt auch für Schleifen – wie du hier sehen kannst:
Der Fehler, der dort immer wieder auftaucht, sagt uns nichts anderes, als dass wir unsere Variablen immer vor ihrer ersten Nutzung definieren müssen, da sonst der Wert plötzlich innerhalb der Funktion auftaucht.
Lokale Variablen
Eine weitere Besonderheit sind Programme wie dieses, die fehlerlos compilieren und ablaufen:
Die Ausgabe des Programmes ist allerdings sehr merkwürdig. Auch wenn beide Variablen denselben Namen haben, werden sie anscheinend unterschiedlich behandelt. Nicht einmal der Compiler wirft einen Fehler aus. Woran liegt das? Tatsächlich haben lokale Variablen Vorrang vor allen anderen Variablen mit demselben Namen. Das heißt für uns, dass das i in den Klammern höherwertiger ist, als das i außerhalb der Klammern. Aber was genau sind jetzt lokale Variablen? So nennt man Variablen, die nur in der Funktion, in der sie definiert wurden, nutzbar sind.
So kommen sie dir auch nicht in die Quere. Allerdings bedeutet das auch, dass sie mit jedem Funktionsaufruf neu definiert werden und jedes Mal ihren Wert dabei verlieren, da sie nach Ende der Funktion auch wieder gelöscht werden.
Globale Variablen C
Globale Variablen können hingegen von überall aus verwendet werden. Damit behalten sie auch ihre Werte nach dem Aufruf einer Funktion. Sie existieren sogar bereits, bevor überhaupt eine Funktion gestartet wurde.
Sie sind dabei aber nicht schwieriger zu handhaben. Im Gegenteil. Sie werden genauso deklariert, initialisiert und zusammengefasst wie lokale Variablen. Und warum deklarieren wir dann nicht alle Variablen global? Das hat einen ganz einfachen Grund: diese Art von Variablen zu handhaben ist zwar sehr einfach, sie ist aber auch genauso gefährlich. Da du von jeder Funktion aus auf die Werte der Variablen zugreifen kannst, kann es zu versehentlichen Änderungen, zum Beispiel durch einen Tippfehler im Variablennamen kommen. Dann gibt dir der Compiler allerdings keinen Fehler aus. Etwas, was er normalerweise tun würde, da auf die gewünschte Variable nicht zugegriffen werden kann. Nun kann er aber eine gültige Wertzuweisung ausführen und macht dies auch. Das kann dazu führen, dass du stundenlang nach dem Fehler in deinem Programm suchen musst. Doch das ist noch nicht alles! Nicht nur dir fällt es so leicht, auf diese Variablen zuzugreifen, auch für Schadsoftware sind Programme, die globale Variablen verwenden, viel anfälliger.
Damit kennst du nun zwei von drei Facts, die du unbedingt noch über Variablen wissen musst.