Quelle est la différence? Qu'est-ce qui est préféré ou quand devrais-je utiliser chacun d'eux?
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
ouEXIT_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 estEXIT_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.
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.
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.
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 macrosEXIT_SUCCESS
etEXIT_FAILURE
pour la valeur du statut conventionnel pour succès et échec, respectivement. Ils sont déclarés dans le fichier stdlib.h.