Gültigkeit von Variablen in Schleife unter VC
-
Hallo!
Ich habe wie angedeutet eine Frage zur Gültigkeit von Variablen bei C++ in Verbindung mit VC 6.0 (+SR4):
Bsp:
for (int i = 0; i < 5; i++) cout << i; for (int i = 0; i < 5; i++) cout << i;
Nach den Definitionen die mir zugrunde liegen, sollte die Gültigkeit der Variablen i sich auf den Schleifenkörper beschränken bzw. nach Beenden der Schleife ist die Variable nicht mehr bekannt.
Beim Compilieren meckert aber VC das er nicht zwei Variable mit dem gleichen Namen deklarieren kann. Wenn ich allerdings einen Block um eine der Schleifen setze funktioniert es wieder (da ja die Variable im Block deklariert wird und danach die Gültigkeit wieder verliert):
{ for (int i = 0; i < 5; i++) cout << i; }
Meine Frage: Ist das ein "Bug"? Habe ich die C++-Definitionen falsch verstanden, oder was? Bitte um Aufklärung.
Danke schon mal im Voraus
Oliver
-
das ist ein special des visual studios, da nimmt er die int i aus dem schleifenkörper nach außen...
[ Dieser Beitrag wurde am 03.04.2003 um 21:48 Uhr von elise editiert. ]
-
hm, man kanns sehen wie man will.
-
Da gibts doch ein paar Zeilen Code um das zu ändern, oder nicht.
Gab schon mehrmals hier, so weit ich mich erinnern kann.
-
du hast die definition richtig verstanden, im standard ist diese regel hinzugekommen, da es aber sehr viel code gab der von dieser regel abhing haben die ms leute ein switch compilier hinzugefügt um das neue verhalten einzuschalten (mfc und co. läst sich dann nicht mehr compilieren)
mit diesen define kanns du es lösen
#define for if(false);else for
das schreibst unter die includes und hast dann das standard verhalten
-
Was da genau vorgeht haben wir letztens im C++-Forum diskutiert... for-schleife
-
Vielen Dank für die Infos! In der Tat funktioniert es jetzt mit dem Define. Auch wenn es ja mehr einen theoretischen Charakter hat (sonst setze ich halt den Block oder nehme einen anderen Bezeichner) hat es mir weiter geholfen.
Gruss
Oliver
-
Original erstellt von Dimah:
**du hast die definition richtig verstanden, im standard ist diese regel hinzugekommen, da es aber sehr viel code gab der von dieser regel abhing haben die ms leute ein switch compilier hinzugefügt um das neue verhalten einzuschalten (mfc und co. läst sich dann nicht mehr compilieren)mit diesen define kanns du es lösen
#define for if(false);else for
das schreibst unter die includes und hast dann das standard verhalten**
Genau das hab ich gemeint