12.6 goto

Die goto-Anweisung kann man verwenden, um direkt an eine bestimmte Stelle innerhalb der aktuellen Funktion zu springen.

Dazu muß man die betreffende Stelle mit einer Marke (label) versehen. Das ist ein Name, gefolgt von einem Doppelpunkt:

oben:
    scanf( "%d", &i );
    if( i<10 ) goto oben;
(Eine Marke muß vor ihrer Verwendung nicht deklariert werden; das goto darf trotzdem vor der Marke stehen.)

Diese Anweisung ist nur selten sinnvoll, da sie das Programm unübersichtlich und fehlerträchtig macht. Sie hat dann ihre Berechtigung, wenn in tief geschachtelten Blöcken innen irgendwo ein Fehler festgestellt wird und die Funktion aber nicht gleich mit return verlassen werden kann, weil beispielsweise noch irgendetwas aufzuräumen ist. Dann kann man zu einer Anweisung innerhalb der Funktion springen, ab der die nötigen Arbeiten durchgeführt werden. Mit break dagegen könnte man immer nur die innerste Schleife verlassen.

Allgemein anerkannte, dringende Empfehlung: goto sparsam verwenden!

Achtung! Vor Sprungmarken wird oft und gerne eine return-Anweisung vergessen. Dann geht der normale Programmlauf in den Funktionsteil hinein, der beispielsweise zur Fehlerbehandlung gedacht ist.

Eine weitere Fehlerquelle sind Sprünge in einen Block mit lokalen Variablen, da in diesem Fall die Initialisierung der Variablen unterbleibt.

Über die Grenzen von Funktionen hinweg kann man damit nicht springen. Dies ist mit der Sprachdefinition von C nicht direkt möglich; es gibt aber genormte Funktionen dafür in der Standardbibliothek. Siehe dazu setjmp() und longjmp().

AnyWare@Wachtler.de