EXIT_FAILURE vs exit (1)?

Quelle est la différence? Quelle est la préférence, ou quand devrais-je utiliser chacun respectivement?

exit(1) (généralement) indique une interruption infructueuse. Cependant, son utilisation est non portable. Par exemple, sur OpenVMS , exit(1) indique effectivement le succès.

Seul EXIT_FAILURE est la valeur standard pour renvoyer une terminaison infructueuse, mais 1 est utilisé pour la même chose dans de nombreuses implémentations.


Donc pour résumer:
Si vous voulez écrire une utilisation de code parfaitement portable,

EXIT_FAILURE pour le cas d’échec. Tandis que,
Vous pouvez utiliser soit exit(0) ou EXIT_SUCCESS pour le cas de réussite.

Notez que, EXIT_SUCCESS ou 0 sont les deux identiques.


Référence:

C99 Standard: 7.20.4.3 La fonction de 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 terminaison d’état réussie est renvoyée. Si la valeur de status est EXIT_FAILURE , une forme définie par l’implémentation de la fin d’échec du statut est renvoyée. Sinon, le statut renvoyé est défini par l’implémentation.

Pour un code réellement portable, EXIT_FAILURE est préférable. Le standard C ne définit que la signification de trois valeurs: EXIT_FAILURE , 0 et EXIT_SUCCESS (avec 0 et EXIT_SUCCESS essentiellement synonymes).

D’un sharepoint vue pratique, la plupart des systèmes classiques acceptent également d’autres valeurs. Si la mémoire sert, Linux vous permettra de renvoyer toutes les valeurs 8 bits et les valeurs Windows 16 bits. À moins que vous ne vous souciez honnêtement du portage vers un ordinateur central IBM, un système VMS, etc., il est probable que vous ne vous souciez pas de la plupart des systèmes qui ne prennent pas en charge les valeurs de retour d’au moins 8 bits.

Utilisez EXIT_FAILURE . C’est une constante utilisée dans tout le système d’exploitation. Sa valeur pourrait être autre que 1 et plus descriptive dans le code.

Il existe des conventions pour 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 une comparaison 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 de statut de sortie. For greater portability , vous pouvez utiliser les macros EXIT_SUCCESS et EXIT_FAILURE pour la valeur de statut conventionnelle pour la réussite et l’échec, respectivement. Ils sont déclarés dans le fichier stdlib.h.