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

96

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

Yu Hao
la source

Réponses:

117

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

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

Notez que la norme C définit EXIT_SUCCESSet EXIT_FAILURErenvoie l'état de terminaison d'un programme C.

0et EXIT_SUCCESSsont les valeurs spécifiées par la norme pour indiquer une terminaison réussie, cependant, seule EXIT_FAILUREest la valeur standard pour renvoyer une terminaison infructueuse. 1est utilisé pour la même chose dans de nombreuses implémentations.


Référence:

C99 Standard: 7.20.4.3 La exitfonction
Para 5

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

Alok Save
la source
1
Pouvez-vous expliquer la non-portabilité? En particulier, les codes de sortie différents de zéro indiquent différents modes de défaillance. Il est courant qu'une application l'utilise pour fournir des informations supplémentaires. Une seule constante ( EXIT_FAILURE) est donc insuffisante.
Konrad Rudolph
@KonradRudolph: J'ai ajouté la citation pertinente. J'espère que cela pourra aider.
Alok Enregistrer
1
@Als: POSIX est un standard. C standard pourrait dire « l' application » , mais ce n'est pas équivalent à dire « non portables », quand les mises en œuvre en fait faire d' accord sur la convention.
Cat Plus Plus
1
@PeterM: Trouvez-moi une plateforme qui n'utilise pas cette convention. Il s'agit probablement d'un environnement spécialisé / embarqué / autonome / quel que soit l'environnement, où la portabilité de exitest la moindre de vos préoccupations (bon sang, il se peut qu'il n'y ait même pas de bibliothèque C disponible là-bas. RIEN N'EST PORTABLE !!! 111).
Cat Plus Plus
3
@CatPlusPlus: sur OpenVMS, un appel exitavec une valeur impaire indique un succès. exit(0)est traité comme un cas particulier par souci de conformité C. Oui, POSIX est un standard, mais tous les systèmes ne s'y conforment pas. Si vous souhaitez écrire du code qui suppose POSIX, vous êtes libre de le faire, mais cela limite la portabilité de votre code.
Keith Thompson
12

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

Quitter le succès

En règle générale, un état 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 sortie

Un état de sortie de 1 est considéré comme un échec et signifie le plus souvent que le programme a dû se fermer pour une raison quelconque et n'a pas pu tout terminer avec succès dans le déroulement normal du programme.

Voici une ressource GNU qui parle de l'état de sortie.


Comme @Als l'a indiqué, deux constantes doivent ê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 limité par la norme à être un, mais de nombreux systèmes l'implémentent comme un seul.

Sam DeHaan
la source
9

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

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

sch
la source
3

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

$ ./prog_with_exit_0
$ echo $?
0
$

et

$ ./prog_with_exit_1
$ echo $?
1
$

Notez également que la valeur des macros EXIT_SUCCESSet EXIT_FAILUREutilisée comme argument de la exitfonction sont définies par l'implémentation, mais sont généralement définies respectivement sur 0un nombre différent de zéro. (POSIX doit EXIT_SUCCESSêtre égal à 0). Cela exit(0)signifie généralement un succès et exit(1)un échec.

Un exitappel de fonction avec un argument dans mainfunction est équivalent à l'instruction returnavec le même argument.

ouah
la source
2

exit est un appel système utilisé pour terminer un processus en cours à partir duquel il est appelé. Le paramètre à quitter est utilisé pour informer le processus parent de l'état du processus enfant. Ainsi, exit (0) peut être utilisé (et souvent utilisé) pour indiquer l'exécution réussie d'un processus et exit (1) pour signaler une erreur. lien de référence

mahtab
la source
1

exit(0)se comporter comme return 0en main()fonction, exit(1)se comporter comme return 1. La norme est, cette mainfonction return 0, si le programme s'est terminé avec succès alors qu'une valeur non nulle signifie que le programme s'est terminé avec une sorte d'erreur.

Tomáš Šíma
la source
1

exit (0) équivaut à exit (EXIT_SUCCESS).

exit (1) équivaut à exit (EXIT_FAILURE).

En cas d'échec normalement, toute valeur positive est renvoyée pour quitter le processus, que vous pouvez trouver sur le shell en utilisant $ ?.

Valeur supérieure à 128 provoquée par le signal. Donc, si une commande shell se termine par un signal, l'état de retour doit être (128 + numéro de signal).

Par exemple:

Si une commande shell se termine par SIGINT, alors $? donnera 130 (128 + 2) (Ici 2 est le numéro de signal pour SIGINT, vérifiez en utilisant kill -l)

Sandeep_black
la source
0

Lorsque l'exécutable se termine (se termine), il renvoie une valeur au shell qui l'a exécuté. exit(0)indique généralement que tout va bien, tandis exit(1)que cela indique que quelque chose ne va pas.

Ed Heal
la source
0

exit(0) signifie que le programme (processus) se termine normalement avec succès.

exit(1) signifie que le programme (processus) se termine normalement sans succès.

Si vous voulez observer cela, vous devez connaître la gestion des signaux et la gestion des processus sous Unix ...

savoir sigaction, watipid()..for () ... tel .... API ...........

Nikunj Patel
la source
0

exit function. Dans le langage de programmation C, la fonction de sortie appelle toutes les fonctions enregistrées avec à la sortie et termine le programme.

exit(1)signifie que le programme (processus) se termine sans succès. Les tampons de fichiers sont vidés, les flux sont fermés et les fichiers temporaires sont supprimés

exit(0) signifie que le programme (processus) s'est terminé avec succès.

Rashid Thattayil
la source