Значения кода возврата во встроенной системе, написанной на C - PullRequest
5 голосов
/ 20 сентября 2011

В большинстве мест, где я видел значения кода возврата, сделано так:

для возврата статуса успеха, #define SUCCESS 0 и другие номера без нуля для всех других случаев ошибки.

Мой вопрос: почему мы выбираем ноль для случая УСПЕХА? Есть ли какие-либо конкретные проблемы, связанные с передовой практикой программирования?

/ Р

Ответы [ 4 ]

4 голосов
/ 20 сентября 2011

Это старая привычка C возвращать 0 в случае успеха и некоторый другой код за ошибки, так что вы можете сказать:

int error = do_stuff();
if (error) {
    handle_error(error);
}

Однако предикаты обычно работают наоборот, возвращая 1 для «успеха» (или true из <stdbool.h>).

3 голосов
/ 20 сентября 2011

Вы должны различать разные ошибки, может быть MaxInt - 1 разных.

Если 0 была ошибкой, а 1 была успешной, как вы могли бы определить разницу между всеми ошибками?

3 голосов
/ 20 сентября 2011

Ноль часто означает успех, потому что ноль - единственное целочисленное значение, которое оценивается как ложное.Все другие целочисленные значения имеют значение true, и они предназначены для различных кодов ошибок.

Это может показаться немного странным и логически инвертированным, но поскольку успех - это просто успех, а ошибки могут отличаться, часто выбирают вышеуказанное соглашение.

На самом деле это наиболее рациональное соглашение, если возвращаемое значение функции используется не только как индикатор успеха / неудачи, но и как код ошибки.Если код ошибки сохранен, скажем, в дополнительном выходном параметре, то возвращение 1 для успеха и 0 для сбоя имеет больше смысла.

Представьте, каково будет условие в случае 0быть успешным:

if (errcode = func()) {
  /* error handling */
}

против более громоздкого:

if ((errcode = func()) != 1) {
  /* error handling */
}
2 голосов
/ 20 сентября 2011

Это соглашение операционной системы.

http://en.wikipedia.org/wiki/Exit_status

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...