VC++ : for schleifen - frage....
-
Hi
hab eines meiner Projekte grad im VC++ probiert... hab da ein Problem:
der Original-Code lautet:
for(short i=0; i<=( sizeof(kills_per_weapon) / sizeof(int) ); ++i) kills_per_weapon[i]=0; for(short i=0; i<=( sizeof(deads_per_weapon) / sizeof(int) ); ++i) deads_per_weapon[i]=0; for(short i=0; i<=( sizeof(suicides_per_type) / sizeof(int) ); ++i) suicides_per_type[i]=0; for(short i=0; i<=( sizeof(kills_per_player) / sizeof(int) ); ++i) kills_per_player[i]=0; for(short i=0; i<=( sizeof(deads_per_player) / sizeof(int) ); ++i) deads_per_player[i]=0;
laut VC++ wird "i" in der 2. Schleife neu definiert... ist das nicht ein Fehler? das "i" aus der 1. Schleife ist ja nur in der For-Schleife gültig, und verliert danach seine Gültigkeit....
wieso muss ich laut VC++ also schreiben:for(short i =0; i<=( sizeof(kills_per_weapon) / sizeof(int) ); ++i) kills_per_weapon[i]=0; for(i=0; i<=( sizeof(deads_per_weapon) / sizeof(int) ); ++i) deads_per_weapon[i]=0; for(i=0; i<=( sizeof(suicides_per_type) / sizeof(int) ); ++i) suicides_per_type[i]=0; for(i=0; i<=( sizeof(kills_per_player) / sizeof(int) ); ++i) kills_per_player[i]=0; for(i=0; i<=( sizeof(deads_per_player) / sizeof(int) ); ++i) deads_per_player[i]=0;
BZW: kann man das irgendwie abstellen?
-
nein leider nicht
da ist das studio einfach ungenau, es zieht das i in der for-schleife nach außen, während der gcc zum beispiel es zur schleife zugehörig ansieht.
<edit> rechtsschreibung... </edit>
[ Dieser Beitrag wurde am 09.02.2003 um 14:20 Uhr von elise editiert. ]
-
dummes Visual Studio...
ist das nur im 6er so, oder hat das 7er die Macke auch noch?
(BTW: widersrpicht das nicht dem ISO-Standard? )
-
dummes Visual Studio...
Das ist Geschmackssache.
Man schaue sich folgenden Code an:for( int i=0; i<10; i++) { i=5; } int i; // i schon deklariert !
Laut Standard ist eine Variable, die INNERHALB eines Blocks {} steht, ausserhalb ungültig. Aber steht i INNERHALB?? Meiner Ansicht nach NEIN.
Und nur weil ein for vor dem Block steht, soll nun i in den Block gehören?Im VC7 kann man einstellen, mit welchem Code man lieber arbeitet!
-
Hi,
ich erwarte eigentlich auch, dass i nach der Schleife seine Gültigkeit verliert, aber dem ist ja leider nicht so. Entweder man arrangiert sich damit, oder man nutzt folgenden Workaround, der vor längerer Zeit hier mal gepostet wurde:#define for if(false); else for
Wenn ich mich recht erinnere sollte es damit funktionieren. Aber schlagt mich nicht, falls es doch nicht geht, ich habe seit längerer Zeit nicht mehr programmiert.
Gruß,
MTE.
-
ReneG:
6.5.3 The for statement [stmt.for]
3 If the for-init-statement is a declaration, the scope of the name(s)
declared extends to the end of the for-statement.