Deklaration von Variablen außerhalb der geschweiften Klammern
-
Hey Leute,
was ändert es eigentlich, wenn man Variablen außerhalb bzw. innerhalb
der geschweiften Klammern deklariert? Ändert das überhaupt was und wenn
ja was hat das für genaue Konsequenzen? Bin noch neu im Programmieren und
durch googlen konnte ich leider nichts herausfinden.lg
xLogiaa
-
Variablen sind nur innerhalb der geschweiften Klammerungsebene gültig, in der sie deklariert wurden*. Es ist eine sehr gute Faustregel, dass man den Gültigkeitsbereich einer Variable so klein wie möglich halten sollte, denn das macht eine eventuelle Fehlersuche einfacher und vor allem vermeidet es von Vornherein viele mögliche Fehler. Manchmal lohnt es sich sogar, mitten im Code einen neuen Block geschweifter Klammern auf zu machen, bloß um darin ganz lokal ein paar neue Variablen zu definieren.
Nach obiger Faustregel folgt auch, dass globale Variablen, das heißt Variablen, die außerhalb aller Klammern stehen, ganz schlimm sind. Deren Gültigkeitsbereich ist das gesamte Programm. Da hat man ganz schnell überhaupt keinen Überblick mehr, was wo passiert. Falls das nicht als guter Grund reicht, globale Variablen zu vermeiden, so ist dies auch technisch ungünstig, da der Compiler ebenfalls den Überblick verliert, was mit diesen passieren kann und es ihm daher sehr schwer gemacht wird, Optimierungen an diesen Variablen vorzunehmen.
*: Kleine "Ausnahme": Bei so etwas wie einer for-Schleife ist eine Variable aus dem Schleifenkopf nur innerhalb des Schleifenkörpers gültig, obwohl die Deklaration technisch gesehen außerhalb der Klammern steht:
void foo() { // i nicht gültig for (int i = 0; i < 2; ++i) { // i gültig } // i nicht gültig }
-
Alles klar, danke für die Antwort

-
SeppJ schrieb:
*: Kleine "Ausnahme": Bei so etwas wie einer for-Schleife ist eine Variable aus dem Schleifenkopf nur innerhalb des Schleifenkörpers gültig, obwohl die Deklaration technisch gesehen außerhalb der Klammern steht:
Nicht "nur innerhalb des Schleifenkörpers" sondern auch innerhalb des Schleifenkopfs.
-
technically wrong schrieb:
SeppJ schrieb:
*: Kleine "Ausnahme": Bei so etwas wie einer for-Schleife ist eine Variable aus dem Schleifenkopf nur innerhalb des Schleifenkörpers gültig, obwohl die Deklaration technisch gesehen außerhalb der Klammern steht:
Nicht "nur innerhalb des Schleifenkörpers" sondern auch innerhalb des Schleifenkopfs.
Also ich zähle meinen Kopf als Teil meines Körpers.

-
SeppJ schrieb:
technically wrong schrieb:
SeppJ schrieb:
*: Kleine "Ausnahme": Bei so etwas wie einer for-Schleife ist eine Variable aus dem Schleifenkopf nur innerhalb des Schleifenkörpers gültig, obwohl die Deklaration technisch gesehen außerhalb der Klammern steht:
Nicht "nur innerhalb des Schleifenkörpers" sondern auch innerhalb des Schleifenkopfs.
Also ich zähle meinen Kopf als Teil meines Körpers.

Der Standard nicht (Namespace body, function body). Leider definiert er nicht, was ein Schleifenkörkper ist. Für Wikipedia und alle anderen Quellen, die ich finden konnte, ist der Schleifenkopf nicht im Körper miteinbezogen.
-
Du hast ja Recht, meine Bemerkung war nicht so ganz ernst gemeint.