107 votes

Quelle est la différence entre exit(0) et exit(1) en C?

Quelqu'un peut-il me dire? Quelle est la différence entre exit(0) and exit(1) en langage C?

125voto

Alok Save Points 115848

Quelle est la différence entre exit(0) et exit(1) en langage C?

exit(0) indique une terminaison réussie du programme et est entièrement portable, tandis que
exit(1) indique généralement une terminaison ratée. Cependant, son utilisation n'est pas portable.

Notez que la norme C définit EXIT_SUCCESS et EXIT_FAILURE pour retourner le statut de terminaison d'un programme C.

0 et EXIT_SUCCESS sont les valeurs spécifiées par la norme pour indiquer une terminaison réussie, cependant, seule EXIT_FAILURE est la valeur standard pour retourner une terminaison ratée. 1 est utilisé pour la même chose dans de nombreuses implémentations cependant.


Référence:

Norme C99: 7.20.4.3 La fonction exit
Para 5

Enfin, le contrôle est retourné à l'environnement hôte. Si la valeur de status est zéro ou EXIT_SUCCESS, une forme définie par l'implémentation du statut de terminaison réussie est retournée. Si la valeur de status est EXIT_FAILURE, une forme définie par l'implémentation du statut de terminaison ratée est retournée. Sinon, le statut retourné est défini par l'implémentation.

1 votes

Pouvez-vous expliquer la non-portabilité? En particulier, les codes de sortie non nuls indiquent différents modes d'échec. Il est courant pour une application d'utiliser cela pour fournir des informations supplémentaires. Une seule constante (EXIT_FAILURE) est donc insuffisante.

0 votes

@KonradRudolph : J'ai ajouté la citation pertinente. J'espère que cela vous aidera.

0 votes

C'est portable sur POSIX et Windows.

12voto

Sam DeHaan Points 7096

exit en langage C prend un entier représentant un code de sortie.

Sortie Réussie

Typiquement, un code de sortie de 0 est considéré comme un succès, ou une sortie intentionnelle causée par l'exécution réussie du programme.

Échec de la Sortie

Un code de sortie de 1 est considéré comme un échec, et signifie le plus souvent que le programme a dû sortir pour une raison quelconque, et n'a pas été en mesure de terminer avec succès toutes les étapes du programme normalement.

Voici une Ressource GNU parlant de l'État de Sortie.


Comme l'a indiqué @Als, deux constantes devraient être utilisées à la place de 0 et 1.

EXIT_SUCCESS est défini par la norme comme étant zéro.

EXIT_FAILURE n'est pas nécessairement défini comme un dans la norme, mais de nombreux systèmes l'implémentent comme tel.

9voto

sch Points 20812

exit(0) indique que le programme s'est terminé sans erreurs. exit(1) indique qu'il y a eu une erreur.

Vous pouvez utiliser des valeurs différentes de 1 pour différencier entre différents types d'erreurs.

4voto

ouah Points 75311

La différence est que la valeur renvoyée à l'environnement est 0 dans le premier cas et 1 dans le second cas :

$ ./prog_with_exit_0
$ echo $?
0
$

et

$ ./prog_with_exit_1
$ echo $?
1
$

Remarquez également que les valeurs des macros EXIT_SUCCESS et EXIT_FAILURE utilisées comme argument de la fonction exit sont définies par l'implémentation mais sont généralement définies respectivement à 0 et un nombre non nul. (POSIX requiert que EXIT_SUCCESS soit égal à 0). Ainsi, en général, exit(0) signifie un succès et exit(1) un échec.

Un appel à la fonction exit avec un argument dans la fonction main est équivalent à l'instruction return avec le même argument.

1voto

Tomáš Šíma Points 207

exit(0) se comporte comme return 0 dans la fonction main(), exit(1) se comporte comme return 1. La norme est que la fonction main renvoie 0, si le programme s'est terminé avec succès, alors qu'une valeur non nulle signifie que le programme a été arrêté en raison d'une erreur quelconque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X