Это бесконечная история, которая отражает пределы (миф) «совместимости и доступности для всех».
То, что программа должна возвратить, чтобы указать «успех», должно быть определено тем, кто получает значение (операционная система или процесс, который вызвал программу), а не спецификацией языка.
Но программистам нравится писать код «переносимым способом», и поэтому они изобретают свою собственную модель для понятия «операционная система», определяющую символьные значения для возврата.
Теперь, в сценарии «многие ко многим» (где многие языки служат для написания программ для многих систем) соответствие между языковым соглашением «успех» и соглашением операционной системы (которое никто не может допустить, чтобы оно всегда было то же самое) должно обрабатываться конкретной реализацией библиотеки для конкретной целевой платформы.
Но, к сожалению, эта концепция не очень ясна в то время, когда язык C был развернут (главным образом для написания ядра UNIX), и гигаграммы книг, в которых написано «возвращение 0 означает успех», поскольку это верно для ОС в то время имела компилятор C.
С тех пор не было четкой стандартизации того, как следует обрабатывать такую корреспонденцию. C и C ++ имеют свое собственное определение «возвращаемых значений», но никто не предоставляет надлежащий перевод ОС (или лучше: ни одна документация компилятора ничего не говорит об этом). 0 означает успех, если верно для UNIX - LINUX и - по независимым причинам - также для Windows, и это охватывает 90% существующих «потребительских компьютеров», что - в большинстве случаев - игнорирует возвращаемое значение (поэтому мы можем обсуждать на протяжении десятилетий, но никто никогда не заметит!)
Внутри этого сценария, прежде чем принять решение, задайте следующие вопросы:
- Я заинтересован, чтобы сообщить что-то моему звонящему о моем существовании? (Если я просто всегда возвращаю 0 ... за всем этим нет никакой подсказки)
- У моего абонента есть соглашения об этом общении? (Обратите внимание, что одно значение не является соглашением: оно не допускает никакого представления информации)
Если оба ответа отрицательны, вероятно, хорошее решение - вообще не писать основной оператор возврата. (И пусть компилятор сам решит, в отношении цели работает).
Если никаких соглашений не существует, 0 = успех соответствует большинству ситуаций (и использование символов может быть проблематичным, если они вводят соглашение).
Если существуют соглашения, убедитесь, что используются символические константы, которые с ними связаны (и обеспечьте согласованность, а не согласованность значений между платформами).