Ваша логика имела бы смысл, если бы возвращаемое значение main
было интерпретировано как логическое значение, но это не так.Возврат из первоначального вызова на main
подобен вызову функции exit
: он сообщает о состоянии завершения системе, в которой вы работаете.
Стандарт C определяет 3 переносимых состояния выхода:
0
, указывающее на успех EXIT_SUCCESS
, также указывающее на успех EXIT_FAILURE
, указывающее на ошибку
(Последние двамакросы, определенные в <stdlib.h>
.)
В Unix допускается любое 8-битное значение (0 .. 255).Все ненулевые значения интерпретируются как коды ошибок.Не существует универсального соглашения о том, что означает любое число, просто то, что 0
представляет успех, а что-то еще - своего рода сбой.
Что касается того, кто может использовать возвращаемое значение: В Unix родительский процесс может использоватьwait
или waitpid
для получения статуса завершения завершенного дочернего элемента.
В стандартной библиотеке C функции, выполняющие действие, обычно не возвращают состояние true / false.(Тесты, такие как islower
или isdigit
, делают, но у них нет других эффектов.) Например, remove
(который удаляет файл) возвращает 0
в случае успеха и -1
в случае ошибки.Это также общий шаблон с системными вызовами Unix.Например, open
возвращает дескриптор файла (неотрицательное целое число) в случае успеха и -1
в случае ошибки.