Visual Studio 2010 Beta 2: undeclared identifier
-
Hallo,
ich habe gerade ein Visual Studio 2003 Projekt mit der
Visual Studio 2010 Beta 2 Version versucht zu kompilieren.
Dabei meckert der Compiler mir alle folgenden Stellen an:for( int i=1; i <= 10; i++ ) { // mach was } for( i=1; i <= 10; i++ ) { // mach nochmal was }
In der Zeile 6 wird i als "undeclared identifier" gemeldet.
Es wird sich ja wohl nicht der C++ Standard geändert haben,
oder hab ich da was völlig verschlafenGruss Ulli
-
Hallo!
Die Variable i der erste FOR Schleife ist nur innerhalb dieser Schleife gültig - danach ist sie "out of scope".
Visual Studio 2003 hat so ein Verhalten noch toleriert und als default "int" angenommen. VS2008 und VS2010 machen das nicht mehr.
-
Danke für die schnelle Antwort!
Was mich stutzig macht, ist dass z.B. Visual Studio 6
aber auch der gcc- Compiler folgenden code nicht
übersetzen sondern den Fehler "redeclaration" melden:for( int i=1; i <= 10; i++ ) { int b; b++; } for( int i=1; i <= 10; i++ ) { int b; b++; }
Daher stellt sich für mich die Frage was ist jetzt richtig,
bzw. was sagt der C++ Standard. Vielleicht weiß das jemandGruss Ulli
PS: Es handelt sich bei dem gcc- Compiler ebenfalls um ein älteres Datum,
d.h. mindestens 7 oder 8 Jahre alt.
-
ALs Grundregel kann man bei den MS Compilern sagen: Diese werden von Jahr zu Jahr C++ konformer... daraus kannst Du jetzt schliessen was der Standard sagt
Mehr dazu gibt es auch da:
http://msdn.microsoft.com/en-us/library/84wcsx8x
http://msdn.microsoft.com/en-us/library/b80153d8The C++ standard says that a variable declared in a for loop shall go out of scope after the for loop ends.
-
Aber mit einem kleinen Trick konnte man den VC6 schon immer zwingen konform zu sein:
http://support.microsoft.com/kb/167748/en-us
#if _MSC_VER < 1300 #ifdef MFX_USE_STANDARDFOR #define for if(0);else for #endif #endif
-
Besten Dank für die Antworten
Gruss Ulli