Уточняющий возврат 0 и 1
Итак, возвращаем 0 в функцию (не main) false и возвращаем 1 или что-либо, кроме 0 означает успех.
Почему в функции main() мы помещаем 0, что означает отсутствие ошибок, когда 1 в других функциях означает, что он успешно работал, спасибо.
Ответы
Ответ 1
0
и 1
(или любое ненулевое число) преобразуются в булевы значения false
и true
в контексте, где происходит преобразование в bool
, например. в if(
here
) ...
. Это используется в вашей программе.
Возвращаемое значение из main
используется по-другому, оно возвращается в оболочку, называемую программой. В контексте оболочки значение интерпретируется по-разному. Там 0
традиционно означает "нет ошибки", а значения больше нуля указывают ошибки, и само значение содержит некоторые подсказки относительно того, какая ошибка произошла. Возьмите этот фрагмент из man grep
:
EXIT STATUS
The grep utility exits with one of the following values:
0 One or more lines were selected.
1 No lines were selected.
>1 An error occurred.
Ответ 2
Возврат определенного номера по умолчанию не означает ничего.
Разработчик решает, что возвращает метод и что означает возвращаемое значение.
main
возвращает код выхода и 0
без ошибок, которые являются прямолинейными, и есть гораздо более возможные возвращаемые значения, которые просто 0
и 1
.
Ответ 3
Нет стандарта, по которому значение представляет ошибку и представляет собой успех. Однако, традиционно, C/С++/Unix предпочитает использовать 0 как успешный и ненулевой для отказа, потому что ненулевое значение может использоваться как код ошибки для представления различных причин сбоев.
Ответ 4
Подумайте об этом так:
По традиции, никакая функция никогда не возвращает логическое значение, указывающее на успех. Вместо этого тип возврата - это либо номер ошибки, либо некоторый указатель на объект.
Теперь, если код ошибки возвращается и ошибки не возникает, естественно, ошибка не возвращается. Это значение нуля, когда возвращается main()
. Следовательно, if(main())
означает нечто вроде if(error)
.
Аналогично, если возвращается указатель объекта и возникает ошибка, ни один объект не может быть возвращен, что снова указывается нулем (= нулевой указатель). Итак, if(getObject())
означает что-то вроде if(/*getObject() actually returned something*/)
.
Итак, хотя это выглядит неправильно, это не так. Это просто, что ничто никогда не возвращает верный логический результат.
Ответ 5
Возвращаемое значение для себя ничего не значит, разработчики решают, означает ли это значение ошибка или нет.
Но посмотрите коды ошибок и их обработку.
int MyFunctionWhichCanFail(...)
{
/*some code*/
return ERROR_CODE;
}
int FunctionWhichWorksWithFunctionWhichCanFail()
{
if (MyFunctionWhichCanFail(...))
{
//some error handling
}
//other stuff
}
В этом случае можно встретить много разных ошибок, поэтому код ошибки - очень хороший вариант, в случае возможного результата неудача/успех лучше использовать bool
.
Также хочу отметить, что в большинстве систем нуль определяется как ERROR_SUCCESS
(или какое-то другое ключевое слово, что означает успех).