globale var., die wieder deklariert wird
-
hallo!
ich versuche derzeit ein programm zu verstehen. im programm wird eine variable global deklariert d.h. am anfang ausserhalb aller funktionen, und wird sie inerhalb einiger funktionen wieder deklariert.
ich frage mich, welche konsiquenzen hatte dies, und welchen sinn.
danke
-
die lokalste variable ueberdeckt alle anderen, sprich:
int var; void foo() { int var; //ueberdeckt globales var { int var; //ueberdeckt alle var } }
eine variable kann nicht mehrmals definiert werden. und deklariert eigentlich nur mehrmals wenn extern davor steht.
-
du kannst aber trotzdem die Globale noch per
::var = 12345;
an jeder belibigen stelle des Codes (auch in tiefsten lokalen gewässern __) verändern.
Hat die aufgerufene Funktion allerdings keine eigene "var" dann wird IMMER die globale genommen.Der sinn ist, das normalerweise alles so lokal wie möglich gemacht werden soll, aber manchmal (z.B. in der OpenGL programmierung) es durchaus besser ist ne globale var zu nehemn. Ansonnsten müsste ich jeder Funktion immer wieder "var" übergeben, was aber tue ich, wenn ich folgendes machen will:
//[...] void funk1(){ var=1; funk2(); } void funk2(){ var=2; funk3(); } void funk3(){ var=3; } //[...] int main(){ var=0; funk1(); return 0; }
Sinnigerweise mache ich "var" hier global, sonnst müsste ich "var" von main an funk1, dann weiter an funk2 und zu guterletzt an funk3 durchschleifen. Das ist nicht nur umständlich sondern auch wesentlich schwerer zu durchschauen und somit fehleranfälliger.
PS: hab ich das Thema verfehlt?? ^^'
eine variable mit dem selben namen nochmal zu erzeugen halte ich für ziemlich gefährlich, weil du damit sehr schnell nen Laufzeitfehler erzeugen kannst, weil du mal ausversehen doch die Globale brauchtest. Habs bis jetzt auch nur zu demonstartionszwecken gesehen, also nimm lieber nen eindeutigen namen, wenn du's selber machen willst.[ Dieser Beitrag wurde am 01.06.2003 um 11:52 Uhr von THE_FreaK editiert. ]
-
Original erstellt von THE_FreaK:
**du kannst aber trotzdem die Globale noch per::var = 12345;
an jeder belibigen stelle des Codes (auch in tiefsten lokalen gewässern __) verändern.**
nur in C++, nicht in C
-
gut zu wissen! ^^#
Thx, Shade _