Question stupide : comment on s'en sort si EXIT_FAILURE est 0 et EXIT_SUCCESS 1?
Je cite le bloc de texte complet de la norme concernant exit et EXIT_FAILURE-EXIT_SUCCESS:
Finally, control is returned to the host environment. If the value of status is zero or EXIT_SUCCESS, an implementation-defined form of the status successful termination is returned. If the value of status is EXIT_FAILURE, an implementation-defined form of the status unsuccessful termination is returned. Otherwise the status returned is implementation-defined.
Donc la vraie valeur renvoyée au système par exit n'est pas nécessairement la valeur que tu lui fournis : un 0 peut être transformé en une valeur différente compréhensible par le système hôte.
Pour la question spécifique à EXIT_SUCCESS == 1; EXIT_FAILURE == 0, je n'ai rien vu dans la norme qui l'interdise, SAUF le fait qu'il est explicitement dit que EXIT_SUCCESS ou 0 en entrée signifie « succès », et que EXIT_FAILURE signifie « échec ». Donc si tu files 0 en entrée à exit, tu lui indiques « succès ». Bref, même si la norme n'indique pas explicitement que EXIT_FAILURE ne peut pas valoir 0, je pense que la formulation indique implicitement que ça entrerait en conflit avec la notion de valeur de succès. Une fois que exit a reçu sa valeur par contre, si en « interne » l'OS hôte a décidé que « succès » = 1, et « échec » = 0, c'est justement le boulot de exit de convertir les valeurs pour qu'elles soient correctement transmises au système (je ne sais pas si je suis clair).
[^] # Re: Ca traduit bien un état d'esprit de la part des développeurs de systemd
Posté par lasher . En réponse au journal Systemd vs Linux, quand l'intransigeance d'un développeur tourne au ridicule.... Évalué à 5.
Je cite le bloc de texte complet de la norme concernant
exitetEXIT_FAILURE-EXIT_SUCCESS:Donc la vraie valeur renvoyée au système par
exitn'est pas nécessairement la valeur que tu lui fournis : un0peut être transformé en une valeur différente compréhensible par le système hôte.Pour la question spécifique à
EXIT_SUCCESS == 1; EXIT_FAILURE == 0, je n'ai rien vu dans la norme qui l'interdise, SAUF le fait qu'il est explicitement dit queEXIT_SUCCESSou0en entrée signifie « succès », et queEXIT_FAILUREsignifie « échec ». Donc si tu files0en entrée àexit, tu lui indiques « succès ». Bref, même si la norme n'indique pas explicitement queEXIT_FAILUREne peut pas valoir0, je pense que la formulation indique implicitement que ça entrerait en conflit avec la notion de valeur de succès. Une fois queexita reçu sa valeur par contre, si en « interne » l'OS hôte a décidé que « succès » = 1, et « échec » = 0, c'est justement le boulot deexitde convertir les valeurs pour qu'elles soient correctement transmises au système (je ne sais pas si je suis clair).