Utilisez l'instruction goto en C

Jinku Hu 12 octobre 2023
  1. Utilisez l’instruction goto pour implémenter une boucle en C
  2. Utilisez l’instruction goto pour sortir des boucles imbriquées en C
Utilisez l'instruction goto en C

Cet article présente plusieurs méthodes d’utilisation de l’instruction goto en C.

Utilisez l’instruction goto pour implémenter une boucle en C

Le mot-clé goto fait partie du langage C et fournit une construction pour effectuer un saut inconditionnel. Les instructions if et switch sont des exemples de sauts conditionnels. La construction goto se compose de deux parties: l’appel goto et le nom de l’étiquette. Toute instruction dans le code peut être précédée d’une étiquette, qui n’est qu’un identifiant suivi de deux points. L’appel goto force l’exécution du code à sauter à la première instruction après l’étiquette. goto ne peut accéder à l’étiquette qu’à l’intérieur de la même fonction et les étiquettes sont visibles dans toute la fonction quelle que soit la ligne sur laquelle elles sont définies.

Dans l’exemple suivant, nous montrons une boucle simple qui compare la variable score à 1000 à chaque cycle. Si score est inférieur à égal, il incrémente et passe à nouveau à l’instruction de comparaison. Une fois que l’instruction if est vraie, un autre appel goto est invoqué et l’exécution saute à l’étiquette EXIT, conduisant à l’arrêt normal du programme. Cet exemple de code, semblable à beaucoup d’autres, peut être réimplémenté sans instructions goto, ce qui les rend relativement faciles à lire. Généralement, il y a eu un débat vigoureux sur l’instruction goto, certains la considèrent comme totalement nuisible au code lisible, et d’autres en voient encore des cas d’utilisation pratiques.

#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);
}

Production:

score: 1001

Utilisez l’instruction goto pour sortir des boucles imbriquées en C

L’instruction goto peut être utile pour changer le flux de contrôle si l’instruction conditionnelle à l’intérieur d’une boucle est satisfaite, et du code doit également être ignoré. L’exemple de code suivant illustre un scénario similaire, dans lequel le tableau de variables d’environnement est accessible et recherché. Notez que l’instruction externe if vérifie si le pointeur est valide et ne procède qu’ensuite à l’exécution de la boucle. La boucle elle-même a une autre condition à l’intérieur, qui vérifie la chaîne spécifique de chaque variable d’environnement. Si la chaîne est trouvée, nous pouvons sortir de la boucle, ne plus gaspiller de ressources de traitement et ignorer l’instruction printf suivante. Cela crée un cas utile pour que l’appel goto soit inclus à l’intérieur de l’instruction if interne qui ferait sauter le programme en dehors de l’instruction if externe, en continuant à exécuter le reste du code.

#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);
}

Production:

HOME=/home/username
Auteur: 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