continue

Die continue-Anweisung bewirkt einen sofortigen Sprung zum Anfang der aktuellen for-, while- oder do-while-Schleife. Die Bedingung wird neu ausgewertet und die Schleifen gegebenfalls neu gestartet. Bei der for-Schleife wird vor der Prüfung der Bedingung die Schritt-Anweisung ausgeführt.

#include <stdio.h> int main(int argc, char** argv){ int i; for(i = 1; i <= 3; ++i){ if(i == 2){continue;} printf("number is %d.\n", i); } i = 0; while(i < 3){ ++i; if(i == 2){continue;} printf("number is %d.\n", i); } i = 0; do { ++i; if(i == 2){continue;} printf("number is %d.\n", i); } while(i < 3); printf("Finished.\n"); return 0; }

number is 1. number is 3. number is 1. number is 3. number is 1. number is 3. Finished.

Siehe auch for, while, do-while, break

Details

Die continue-Anweisung ist nur innerhalb von Schleifen erlaubt. Bei jeder for-, while- oder do-while-Schleife fügt der Compiler an der entsprechenden Stelle der Struktur ein künstliches Label ein, zu dem wie bei der goto-Anweisung einfach gesprungen wird.

Bei der for-Schleife springt continue zu dem Punkt, wo die Schritt-Anweisung ausgeführt wird. Danach wird die Bedingung geprüft und gegebenfalls die Schleife neu gestartet.

Bei der while- und bei der do-while-Schleife springt continue direkt dahin, wo die Bedingung geprüft und gegebenfalls die Schleife neu gestartet wird.

Eine continue-Anweisung springt immer innerhalb der aktuellen, also innersten Schleife:

#include <stdio.h> int main(int argc, char** argv){ int x, y; for(y=0; y<3; ++y){ for(x=0; x<3; ++x){ if(x==1){continue;} printf("x=%d y=%d\n", x, y); } } printf("Finished.\n"); return 0; }

x=0 y=0 x=2 y=0 x=0 y=1 x=2 y=1 x=0 y=2 x=2 y=2 Finished.

Ein heikler Punkt bei der continue-Anweisung ist, dass bei der while- und bei der do-while-Schleife keine Schritt-Anweisung ausgeführt wird. Da jedoch diese Schleifen kaum für Laufvariablen verwendet werden, sondern eher für logische Konstrukte, ist die korrekte Ausführung der Abbruchbedingung dem Programmierer überlassen.

Vorsicht ist auch geboten, wenn innerhalb einer Schleife Speicher alloziiert wird. Durch eine continue-Anweisung kann es passieren, dass man vergisst, den Speicher wieder freizugeben, sodass manchmal Speicher doppelt alloziiert wird.