Verwendung der goto-Anweisung in C

Jinku Hu 12 Oktober 2023
  1. Verwenden der goto-Anweisung zur Implementierung einer Schleife in C
  2. Verwendung der goto-Anweisung zum Ausstieg aus verschachtelten Schleifen in C
Verwendung der goto-Anweisung in C

Dieser Artikel demonstriert mehrere Methoden zur Verwendung der goto-Anweisung in C.

Verwenden der goto-Anweisung zur Implementierung einer Schleife in C

Das Schlüsselwort goto ist Teil der Sprache C und bietet ein Konstrukt, um einen unbedingten Sprung durchzuführen. Die Anweisungen if und switch sind Beispiele für bedingte Sprünge. Das goto-Konstrukt besteht aus zwei Teilen: dem goto-Aufruf und dem Labelnamen. Jeder Anweisung im Code kann ein Label vorangestellt werden, das einfach ein Bezeichner ist, gefolgt von einem Doppelpunkt. Der goto-Aufruf zwingt die Codeausführung, zur ersten Anweisung nach dem Label zu springen. goto kann nur innerhalb der gleichen Funktion zum Label springen und Labels sind in der gesamten Funktion sichtbar, unabhängig davon, in welcher Zeile sie definiert sind.

Im folgenden Beispiel demonstrieren wir eine einfache Schleife, die bei jedem Durchlauf die Variable score mit 1000 vergleicht. Wenn score kleiner als gleich ist, wird inkrementiert und wieder zur Vergleichsanweisung gesprungen. Sobald die if-Anweisung wahr ist, wird ein weiterer goto-Aufruf aufgerufen und die Ausführung springt zum Label EXIT, was zur normalen Beendigung des Programms führt. Dieser Beispielcode kann, wie viele andere auch, ohne goto-Anweisungen neu implementiert werden, was ihn relativ einfach lesbar macht. Generell gibt es eine heftige Debatte über die goto-Anweisung, einige halten sie für absolut schädlich für lesbaren Code, andere sehen noch einige praktische Anwendungsfälle dafür.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

extern char **environ;

int main(int argc, char *argv[]) {
  int score = 1;

START:
  if (score > 1000) goto EXIT;

  score += 1;
  goto START;

EXIT:
  printf("score: %d\n", score);
  exit(EXIT_SUCCESS);
}

Ausgabe:

score: 1001

Verwendung der goto-Anweisung zum Ausstieg aus verschachtelten Schleifen in C

Die goto-Anweisung kann nützlich sein, um den Kontrollfluss zu ändern, wenn die bedingte Anweisung innerhalb einer Schleife erfüllt ist, und auch etwas Code übersprungen werden soll. Das folgende Code-Beispiel demonstriert ein ähnliches Szenario, bei dem auf das Array der Umgebungsvariablen zugegriffen und dieses durchsucht wird. Beachten Sie, dass die äußere if-Anweisung prüft, ob der Zeiger gültig ist und erst dann mit der Ausführung der Schleife fortfährt. Die Schleife selbst hat eine weitere Bedingung in sich, die nach der spezifischen Zeichenkette jeder Umgebungsvariablen sucht. Wenn die Zeichenkette gefunden wird, können wir aus der Schleife aussteigen, keine weiteren Verarbeitungsressourcen verschwenden und die folgende printf-Anweisung überspringen. Dies schafft einen nützlichen Fall für den goto-Aufruf innerhalb der inneren if-Anweisung, der das Programm dazu bringen würde, aus der äußeren if-Anweisung herauszuspringen und den Rest des Codes weiter auszuführen.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

extern char **environ;

int main(int argc, char *argv[]) {
  if (environ != NULL) {
    for (size_t i = 0; environ[i] != NULL; ++i) {
      if (strncmp(environ[i], "HOME", 4) == 0) {
        puts(environ[i]);
        goto END;
      }
    }
    printf("No such variable found!\n");
  }
END:

  exit(EXIT_SUCCESS);
}

Ausgabe:

HOME=/home/username
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook