Hallo Nils ;)
In C bestehen Schleifen aus einem Kopf und einem Rumpf. Die erste
Schleife ist eine abweisende Form, die zweite nicht. Das liegt daran
dass bei der zweiten Variante der Schleifenrumpf immer mind. einmal
ausgefuehrt wird, da die Abbruchsbedingung nach dem ersten Durchlauf das
erste mal evaluiert wird.
1) while ( HEAD_EXPR ) { }
2) do { } while ( HEAD_EXPR )
Die Magie mit dem Semikolon ist folgende: In C ist das Semikolon ";"
eine leere Anweisung. Die Schleife erwartet genau eine Anweisung nach
ihrem Kopf. Dies kann nun eine Anweisung sein wie etwa
while (1) do_something();
oder es ist eben ein Block (wie oben). Der Block fasst mehrere
Anweisungen zu einer zusammen und wird auch so behandelt. Wenn Du eine
Endlosschleife wie z.B.
while (1);
schreibst ist das auch valide.
Schreibst Du nun
while (1); { /* ... */ }
Dann ist der Block nicht mehr Teil der Schleife und wird daher immer
ausgefuehrt.
Ich hoffe ich habe die letzten Klarheiten beseitigt ;)
Alles Gute,
Michael