Grundlagen der Programmiersprache C
unsigned int i;
for (i = 3; i >= 0; i--)
printf("%u ", i);unsigned int habe 32 Bit. Wie verhält sich der obige Code bei der Ausführung?
- AEr gibt 3 2 1 0 aus und endet
- BEr gibt 3 2 1 aus und endet
- CNach der Ausgabe von 3 2 1 0 endet er nicht, sondern gibt fortlaufend abnehmende Werte ab 4294967295 aus
Antwort und Erläuterung anzeigen
Antwort: C. Nach der Ausgabe von 3 2 1 0 endet er nicht, sondern gibt fortlaufend abnehmende Werte ab 4294967295 aus
i ist vorzeichenlos und kann nie negativ werden, daher ist die Bedingung i >= 0 immer wahr. Führt man bei i = 0 i-- aus, springt der Wert auf 2³² − 1 = 4294967295, und die Schleife endet nicht, sondern gibt fortlaufend 4294967294, 4294967293 usw. aus. Soll bis 0 heruntergezählt werden, verwendet man int oder ändert die Schreibweise, etwa zu for (i = 4; i-- > 0; ). gcc warnt mit -Wextra, dass dieser Vergleich immer wahr ist.
Weiter: 9 weitere Fragen zu Grundlagen der Programmiersprache C