C'est une histoire sans fin qui reflète les limites (un mythe) de "l'interopérabilité et la portabilité dans tous".
Ce que le programme doit renvoyer pour indiquer «succès» doit être défini par la personne qui reçoit la valeur (le système d'exploitation ou le processus qui a appelé le programme) et non par une spécification de langage.
Mais les programmeurs aiment écrire du code de manière "portable" et par conséquent ils inventent leur propre modèle pour le concept de "système d'exploitation" définissant les valeurs symboliques à renvoyer.
Maintenant, dans un scénario plusieurs-à-plusieurs (où de nombreux langages servent à écrire des programmes sur plusieurs systèmes), la correspondance entre la convention de langage pour «succès» et celle du système d'exploitation (que personne ne peut accorder à être toujours la même) devrait être géré par l'implémentation spécifique d'une bibliothèque pour une plate-forme cible spécifique.
Mais - malheureusement - ces concepts n'étaient pas aussi clairs au moment où le langage C a été déployé (principalement pour écrire le noyau UNIX), et les Gigagrammes de livres où écrits en disant "retour 0 signifie succès", puisque c'était vrai sur le système d'exploitation à cette fois avoir un compilateur C.
Dès lors, aucune normalisation claire n'a jamais été faite sur la manière dont une telle correspondance devrait être traitée. C et C ++ ont leur propre définition des «valeurs de retour» mais personne n'accorde une traduction correcte du système d'exploitation (ou mieux: aucune documentation du compilateur n'en dit rien). 0 signifie succès si vrai pour UNIX - LINUX et - pour des raisons indépendantes - pour Windows également, et cela couvre 90% des "ordinateurs grand public" existants, qui - dans la plupart des cas - ne tiennent pas compte de la valeur de retour (nous pouvons donc discutez pendant des décennies, mais personne ne le remarquera jamais!)
Dans ce scénario, avant de prendre une décision, posez les questions suivantes: - Suis-je intéressé à communiquer quelque chose à mon interlocuteur sur mon existant? (Si je retourne toujours 0 ... il n'y a aucun indice derrière tout) - Mon interlocuteur a-t-il des conventions sur cette communication? (Notez qu'une seule valeur n'est pas une convention: cela ne permet aucune représentation d'information)
Si les deux réponses sont non, la bonne solution est probablement de ne pas écrire du tout l'instruction de retour principale. (Et laissez le compilateur décider, en ce qui concerne la cible).
Si aucune convention n'est en place 0 = le succès satisfait la plupart des situations (et l'utilisation de symboles peut être problématique, s'ils introduisent une convention).
Si des conventions sont en place, veillez à utiliser des constantes symboliques qui sont cohérentes avec elles (et assurez la cohérence des conventions, et non la cohérence des valeurs, entre les plates-formes).