Возвращаемое значение main
, которое становится кодом завершения процесса после его выполнения, связано не с тем, является ли код правильным C ++, а с тем, выполнялся ли он правильно с точки зрения его семантики (скажем, его бизнес-логика).
Хотя программа существует в виде исходного кода на C ++, возврат из main
является инструкцией, как и любая другая.Наличие return 0;
в main
не повлияет на то, является ли ваша программа допустимой программой на C ++, и не исправит, например, синтаксические ошибки.Во время компиляции это совершенно не имеет значения для правильности.
Возвращаемое значение main
вступает в игру , когда скомпилированная программа действительно выполняется (уже в двоичной форме).
То есть, когда вы выполняете, например, gcc ... -o myapp
, возвращаемое значение main
не вступает в игру (на самом деле, оно даже не существует).Но когда вы затем выполняете ./myapp
, его код завершения процесса (который используется, например, shell) - это то, что устанавливается возвращаемым значением main
.
Например,команда unix if
проверяет, возвращен ли ее аргумент 0
или не 0
:
if ./myapp; then
echo "Success"
fi
Отражает ли приведенный выше сценарий оболочки Success
или нет, зависит от того, будет ли код завершения процессаmyapp
было 0
или нет, другими словами, возвращала ли его функция main
0
или нет.
Эквивалент такой проверки в Windows-мире будет:
myapp.exe
if errorlevel 1 goto bad
echo "Success"
bad:
Одно общее соглашение - иметь код завершения процесса равным 0 при успешном завершении, 1, когда программе не удалось выполнить свою задачу (например, ее попросили удалить несуществующий файл), и 2, когда она былавызван неправильно (например, ему была задана опция командной строки, которую он не понимает). Эти являются значениями main
возвратов.