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?

  1. AEr gibt 3 2 1 0 aus und endet
  2. BEr gibt 3 2 1 aus und endet
  3. 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.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. Ein Programm, das c aus „char c = 200;“ mit %d von printf ausgibt, zeigt nach dem Kompilieren mit gcc für Linux auf x86-64 den Wert −56, mit gcc für Linux auf Arm dagegen 200. Was ist der Grund für den Unterschied?
  2. Welche Ausgabe erzeugt der obige Code, in dem b++ rechts von && und || steht, bei der Ausführung?
  3. Welche Ausgabe erzeugt die obige switch-Anweisung, die ein case ohne break enthält, bei der Ausführung?
  4. Welche Ausgabe erzeugt das obige Programm bei der Ausführung?
  5. Die obige Funktion f wird dreimal hintereinander aufgerufen. Welcher Rückgabewert ergibt sich beim dritten Aufruf?