for-schleife
-
ist i lokal (in der schleife), so hat sie den wert 4 nach endgültigem abarbeiten der schleife
Nein! Ist "i" lokal, existiert es nach der Schleife nicht mehr, ist also undefiniert!
Bei MSVC ist es anders (nicht Standard-konform), aber auch hier hat "i" nach der Schleife den Wert 5 !
-
Original erstellt von CodeWalker:
Nein! Ist "i" lokal, existiert es nach der Schleife nicht mehr, ist also undefiniert!
Bei MSVC ist es anders (nicht Standard-konform), aber auch hier hat "i" nach der Schleife den Wert 5 !GEnau das habe ich gerade geschrieben
-
Original erstellt von MaSTaH:
**Ne, wenn i = 0 die Ausgangssituation war dann hat sie in beiden Fällen nachher den Wert 5Aus:
for(int i = 0; i < 5; ++i) //...
Macht der MSVC intern (anscheinend):
int i = 0; for(; i < 5; ++i) //...
Deshalb ist i nachher noch vorhanden, da es nicht innerhalb der Schleife erstellt wurde...**
kommt auf den compiler an. ist nicht gerade berauschend, dass dein compiler dir andere ergebnisse liefert als meiner.
hab devc++.
Ne, wenn i = 0 die Ausgangssituation war dann hat sie in beiden Fällen nachher den Wert 5
ich denke nicht. lokal i muss bei der bedingung i=0; i<5 nachher auf 4 stehen.
beispiel:
int array[5]; for(int i=0; i<5; i=i+1) array[i]=i;
-
Original erstellt von MaSTaH:
Der MSVC meldet aber beim kompilieren AFAIK eine redefinitiondoch.
int i; for(int i;...
ist fehler bei dem. deshalb dachte ich, es sei nicht möglich, zweideutige sachen zu machen. aber es geht, wie meine funktion oben zeigt, mit nem block mehr.
-
ich denke nicht. lokal i muss bei der bedingung i=0; i<5 nachher auf 4 stehen.
beispiel:
int array[5];
for(int i=0; i<5; i=i+1)
array[i]=i;Nochmal zum Mitschreiben: i ist nach der Schleife nicht defininert, kann also JEDEN BELIEBIGEN Wert haben !!!
-
Original erstellt von volkard:
ist fehler bei dem. deshalb dachte ich, es sei nicht möglich, zweideutige sachen zu machen. aber es geht, wie meine funktion oben zeigt, mit nem block mehr.Jo, mit nem Block mehr geht es...
-
Original erstellt von CodeWalker:
Nochmal zum Mitschreiben: i ist nach der Schleife nicht defininert, kann also JEDEN BELIEBIGEN Wert haben !!!Auf welche Beiträge antwortest du??? 20 Mal auf den selben??? Wenn i nicht definiert ist kann es auch keinen Wert haben...
Außerdem geht es gerade um den MSVC... Laut Standard hast du ja recht. Wurde aber auch schon vor ner halben STunde so gepostet...
-
@Mastah: wenn du den Thread mal durchliest, siehst du, daß "i==5" es immer noch nicht verstanden hat....
-
Original erstellt von CodeWalker:
@Mastah: wenn du den Thread mal durchliest, siehst du, daß "i==5" es immer noch nicht verstanden hat....Das war aber vor ner halben STunde. In der Zwischenzeit wurde es schon erklärt...
-
es war in seinem letzten Beitrag um 13:41.... aber es ist mir irgendwie zu doof, mich mit dir darüber zu zanken
-
Original erstellt von CodeWalker:
es war in seinem letzten Beitrag um 13:41.... aber es ist mir irgendwie zu doof, mich mit dir darüber zu zankenAso, den habe ich nicht übersehen, sorry... Hatte nur den um 13:32 im Hinterkopf
-
Original erstellt von CodeWalker:
Nochmal zum Mitschreiben: i ist nach der Schleife nicht defininert, kann also JEDEN BELIEBIGEN Wert haben !!!Falsch! Es ist nach Standard falsch!
Wenn Du so unflexibel bist, über nen realexistierenden compiler nachzudenken, biete ich dieses ersatzproblem an:int array[5]; int i=0; for(; i<5; i=i+1) array[i]=i;
Alle bleiben bei dem alten Problem, CodeWalker nimmt das neue, und keiner bemerkt den Unterschied.
-
@Volkard:
Ich lese hier oft genug, daß es in diesem Forum um den Standard geht. Außerdem habe ich bereits in meinem 1. Posting darauf hingewiesen, daß sich MSVC anders verhält. Wenn sich ein Compiler nicht nach Standard verhält, ist das in meinen Augen falsch - was findest DU nun daran falsch, daß ich das "falsch" nenne???
Ich deklariere Schleifenvariablen immer vor der Schleife, weil ich dieses Fehlverhalten von MSVC zufällig kenne. Wenn du das anders machst, ist das deine Sache und nicht mein Problem. Schließlich wirst du die Fehler suchen müssen, die zwangsläufig entstehen werden, sobald du mit einem Compiler arbeitest, der Standard-konform ist.
Falls Du irgendwo in diesem Thread etwas von mir lesen kannst, was sachlich nicht richtig ist, zitiere mich bitte.
-
Original erstellt von CodeWalker:
@Volkard:
Ich lese hier oft genug, daß es in diesem Forum um den Standard geht. Außerdem habe ich bereits in meinem 1. Posting darauf hingewiesen, daß sich MSVC anders verhält. Wenn sich ein Compiler nicht nach Standard verhält, ist das in meinen Augen falsch - was findest DU nun daran falsch, daß ich das "falsch" nenne???nee, darfste "falsch" nennen, aber oben hastes "undefiniert" genannt, und ich sagte dazu "falsch, es ist falsch".
Ich deklariere Schleifenvariablen immer vor der Schleife, weil ich dieses Fehlverhalten von MSVC zufällig kenne. Wenn du das anders machst, ist das deine Sache und nicht mein Problem.
ich empfehle
#define for if(false);else for
und der msvc ist wieder bedienbar.außerdem ist es immer emfehlenswert, zu gucken, wie es die anderen machen, und niht nur seinen tandpunkt zu postulieren und zu sagen, "mir egal, was ihr macht". in diesem falle wirste wohl umschwenken auf das makro. denn lokalere variablen sind fehlerfreiere.
nee, mich hat es nur gestört, daß du im 16. beitrag mit "Nochmal zum Mitschreiben..." ankommst, wobei es völlig wurst ist, für die eststellung, daß nach ner for-schleife die variable (falls sie noch lebt) den ersten wert hat, bei dem die laufbedingung nicht erfüllt war. (wie hätte auch sonst die bedingung zuschlagen können?)
-
Original erstellt von volkard:
**
#define for if(false);else for
**
Das funktioniert ?
Damit ist der MSVC in dieser Hinsicht Standartkonform ?
-
ja