web-dev-qa-db-fra.com

EXIT_FAILURE vs exit (1)?

Quelle est la différence? Qu'est-ce qui est préféré ou quand devrais-je utiliser chacun d'eux?

51

exit(1) (généralement) indique un arrêt non réussi. Cependant, son utilisation n'est pas portable. Par exemple, sur OpenVMS , exit(1) indique en fait le succès.

Seul EXIT_FAILURE Est la valeur standard pour renvoyer une résiliation infructueuse, mais 1 Est utilisé de la même manière dans de nombreuses implémentations.


Donc, pour résumer:
Si vous voulez écrire parfaitement avec un code portable,

EXIT_FAILURE Pour le cas d'échec. Tandis que,
Vous pouvez utiliser soit exit(0) ou EXIT_SUCCESS Comme exemple de réussite.

Notez que, EXIT_SUCCESS Ou 0 Sont identiques.


Référence:

C99 Standard: 7.20.4.3 La fonction exit
Para 5

Enfin, le contrôle est renvoyé à l'environnement hôte. Si la valeur de status est zero ou EXIT_SUCCESS, Une forme définie par l'implémentation de la fin de statut avec succès est renvoyée. Si la valeur de status est EXIT_FAILURE, Une forme définie par l'implémentation de la terminaison status non réussie est renvoyée. Sinon, le statut renvoyé est défini par implémentation.

55
Alok Save

Pour un code vraiment portable, EXIT_FAILURE est préféré. La norme C ne définit la signification que pour trois valeurs: EXIT_FAILURE, 0, et EXIT_SUCCESS (avec 0 et EXIT_SUCCESS essentiellement synonyme).

D'un point de vue pratique, les systèmes la plupart acceptent également d'autres valeurs. Si la mémoire est utilisée, Linux vous permet de renvoyer les valeurs 8 bits et Windows 16 bits. À moins que honnêtement ne vous souciez du portage sur un ordinateur central IBM, VMS, etc., il est fort probable que vous ne vous souciez pas de la plupart des systèmes qui ne prennent pas en charge les valeurs de retour au moins 8 bits.

11
Jerry Coffin

Utilisation EXIT_FAILURE. C'est une constante qui est utilisée dans tout le système d'exploitation. Sa valeur pourrait être autre que 1 et il est également plus descriptif dans le code.

4
Ed Heal

Il existe des conventions concernant les types de valeurs de statut que certains programmes doivent renvoyer. La convention la plus courante est simplement 0 pour le succès et 1 pour l'échec. Les programmes qui effectuent des comparaisons utilisent une convention différente: ils utilisent le statut 1 pour indiquer une incompatibilité et le statut 2 pour indiquer une incapacité à comparer. Votre programme doit suivre une convention existante si une convention existante a du sens.

Certains systèmes non-POSIX utilisent des conventions différentes pour les valeurs d'état de sortie. For greater portability, vous pouvez utiliser les macros EXIT_SUCCESS et EXIT_FAILURE pour la valeur du statut conventionnel pour succès et échec, respectivement. Ils sont déclarés dans le fichier stdlib.h.

1
Ravindra Bagale