Utilisez l'instruction goto en C
-
Utilisez l’instruction
goto
pour implémenter une boucle en C -
Utilisez l’instruction
goto
pour sortir des boucles imbriquées 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
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