Undefiniertes Verhalten?!
-
Tag,
ist das hier irgentwo "definiert"??int foo = 7; while(foo--) // es geht um das hier... { cout << foo << endl; }
MfG Usr
-
usr schrieb:
ist das hier irgentwo "definiert"??
Nein
-
Also ist das möglich das das von Compiler zu Compiler unterschiedliche Ausgaben liefert?!
-
Hi,
ich verstehe das Problem nicht. Die Ausgabe ist 6, 5, ..., wo ist da was nicht definiert?
ChrisM
-
ChrisM schrieb:
ich verstehe das Problem nicht. Die Ausgabe ist 6, 5, ..., wo ist da was nicht definiert?
Ok, mein Fehler...
...ich meinte ob das Standard konform ist?
-
ChrisM schrieb:
Hi,
ich verstehe das Problem nicht. Die Ausgabe ist 6, 5, ..., wo ist da was nicht definiert?
ChrisM
Ich glaube es ist nicht definiert wo genau in diesem Schleife foo dekrementiert wird. Aber ich bin nitch 100% sicher. Scheint nach
i = i++;
aehnlich zu sein
-
Das Verhalten ist genau definiert. foo wird nach der Auswertung der Schleifenbedingung foo-- dekrementiert. Es werden die Werte 6, 5, 4, 3, 2, 1, 0 ausgegeben.
-
Du hast recht
I habe nach Standard gesehen. Es sagt das foo ehe das naechset "sequence-point" dekrementiert wird. Und Ende des
while (foo--)
ist ein "sequence-point".
Und bin ich dabei dumm
Das ist ein eqivalent von
for(;foo--;) { cout<<foo<<endl; }
-
Vielleicht geht es aber auch um das Argument für while...
Natürlich ist alles bis auf 0 true, das ist auch so in C++ standardmäßig festgelegt, es läuft also bis nach 0 und damit hat sich's.
Anders sieht es natürlich aus, wenn man statt int einen float verwendet...
MfG MAV
-
Mis2com schrieb:
Vielleicht geht es aber auch um das Argument für while...
Natürlich ist alles bis auf 0 true, das ist auch so in C++ standardmäßig festgelegt, es läuft also bis nach 0 und damit hat sich's.
Anders sieht es natürlich aus, wenn man statt int einen float verwendet...
MfG MAVquatsch. floats haben keinen fehler in kleinen ganzen zahlen. da steht foo--, nicht sowas wie foo-=0.1.