Dies ist eine unendliche Geschichte, die die Grenzen (ein Mythos) der "Interoperabilität und Portabilität über alle" widerspiegelt.
Was das Programm zurückgeben sollte, um "Erfolg" anzuzeigen, sollte dadurch definiert werden, wer den Wert erhält (das Betriebssystem oder der Prozess, der das Programm aufgerufen hat), nicht durch eine Sprachspezifikation.
Aber Programmierer schreiben Code gerne auf "tragbare Weise" und erfinden daher ihr eigenes Modell für das Konzept des "Betriebssystems", das symbolische Werte definiert, die zurückgegeben werden sollen.
In einem Viele-zu-Viele-Szenario (in dem viele Sprachen dazu dienen, Programme auf viele Systeme zu schreiben) sollte nun die Entsprechung zwischen der Sprachkonvention für "Erfolg" und dem Betriebssystem (das niemand gewähren kann, immer gleich zu sein) erfolgen durch die spezifische Implementierung einer Bibliothek für eine bestimmte Zielplattform behandelt werden.
Leider war dieses Konzept zum Zeitpunkt der Bereitstellung der C-Sprache nicht so klar (hauptsächlich zum Schreiben des UNIX-Kernels), und Gigagramme von Büchern wurden mit den Worten "return 0 bedeutet Erfolg" geschrieben, da dies auf dem Betriebssystem unter zutraf diesmal mit einem C-Compiler.
Von da an wurde keine klare Standardisierung vorgenommen, wie eine solche Korrespondenz behandelt werden sollte. C und C ++ haben ihre eigene Definition von "Rückgabewerten", aber niemand gewährt eine ordnungsgemäße Betriebssystemübersetzung (oder besser: Keine Compiler-Dokumentation sagt etwas darüber aus). 0 bedeutet Erfolg, wenn dies für UNIX - LINUX und - aus unabhängigen Gründen - auch für Windows zutrifft, und dies deckt 90% der vorhandenen "Consumer-Computer" ab, die - in den meisten Fällen - den Rückgabewert ignorieren (so können wir) Diskutiere seit Jahrzehnten, aber niemand wird es jemals bemerken!)
Stellen Sie in diesem Szenario vor einer Entscheidung die folgenden Fragen: - Bin ich daran interessiert, meinem Anrufer etwas über meine bestehende Situation mitzuteilen? (Wenn ich nur immer 0 zurückgebe ... gibt es keinen Hinweis hinter dem Alles) - Hat mein Anrufer Konventionen bezüglich dieser Kommunikation? (Beachten Sie, dass ein einzelner Wert keine Konvention ist: Dies erlaubt keine Darstellung von Informationen.)
Wenn beide Antworten Nein sind, besteht die gute Lösung wahrscheinlich darin, die Hauptrückgabeanweisung überhaupt nicht zu schreiben. (Und lassen Sie den Compiler entscheiden, in Bezug auf das Ziel arbeitet).
Wenn keine Konvention vorhanden ist 0 = Erfolg, erfüllen Sie die meisten Situationen (und die Verwendung von Symbolen kann problematisch sein, wenn sie eine Konvention einführen).
Wenn Konventionen vorhanden sind, stellen Sie sicher, dass symbolische Konstanten verwendet werden, die mit ihnen kohärent sind (und stellen Sie die Kohärenz der Konventionen und nicht die Wertekohärenz zwischen den Plattformen sicher).