To niekończąca się historia, która odzwierciedla ograniczenia (mit) „ponad wszystko interoperacyjności i przenośności”.
To, co program powinien zwrócić, aby wskazać „sukces”, powinno być określone przez to, kto otrzymuje wartość (system operacyjny lub proces, który wywołał program), a nie przez specyfikację języka.
Jednak programiści lubią pisać kod w „przenośny sposób” i dlatego wymyślają swój własny model pojęcia „systemu operacyjnego” definiującego wartości symboliczne do zwrócenia.
Teraz, w scenariuszu wiele-do-wielu (gdzie wiele języków służy do pisania programów w wielu systemach) zgodność między konwencją językową określającą „sukces” a konwencją systemu operacyjnego (której nikt nie może przyznać, że jest zawsze taka sama) powinna być obsługiwane przez konkretną implementację biblioteki dla określonej platformy docelowej.
Ale - niestety - te koncepcje nie były tak jasne w czasie wdrażania języka C (głównie do pisania jądra UNIX), a gigagramy książek, w których napisano „powrót 0 oznacza sukces”, ponieważ było to prawdą w systemie operacyjnym w tym razem mając kompilator C.
Od tego czasu nie dokonano żadnej jasnej standaryzacji co do tego, jak należy postępować z taką korespondencją. C i C ++ mają swoją własną definicję „wartości zwracanych”, ale nikt nie przyznaje odpowiedniego tłumaczenia systemu operacyjnego (lub lepiej: żadna dokumentacja kompilatora nie mówi o tym). 0 oznacza sukces, jeśli jest prawdziwe dla UNIX - LINUX i - z niezależnych powodów - także dla Windows, a to obejmuje 90% istniejących "komputerów konsumenckich", które - w większości przypadków - pomijają zwracaną wartość (więc możemy dyskutujemy od dziesięcioleci, ale nikt tego nigdy nie zauważy!)
W tym scenariuszu, przed podjęciem decyzji, zadaj następujące pytania: - Czy jestem zainteresowany przekazaniem dzwoniącemu czegoś na temat mojego obecnego? (Jeśli zawsze zwracam 0 ... nie ma pojęcia o tym wszystkim) - Czy mój rozmówca ma konwencje dotyczące tej komunikacji? (Zauważ, że pojedyncza wartość nie jest konwencją: to nie pozwala na jakąkolwiek reprezentację informacji)
Jeśli obie te odpowiedzi brzmią „nie”, prawdopodobnie dobrym rozwiązaniem jest w ogóle nie pisać głównej instrukcji powrotu. (I pozwól kompilatorowi zdecydować, w odniesieniu do celu pracuje).
Jeśli nie ma żadnej konwencji, 0 = sukces spełnia większość sytuacji (a używanie symboli może być problematyczne, jeśli wprowadzają konwencję).
Jeśli konwencje istnieją, upewnij się, że używasz symbolicznych stałych, które są z nimi spójne (i zapewniaj spójność konwencji, a nie spójność wartości, między platformami).