Неверное возвращаемое значение в основной функции?

Ранее я читал, что 0 в C-Language обозначает false, а 1 - true. И заметили, что функция main возвращает 0, но почему это так? в случае, если весь мой код выполнен успешно, он должен вернуть true (1). Другой связанный вопрос, я все еще не могу понять, кто может использовать возвращаемое значение? поскольку никакая другая функция не вызывала основную функцию внутри моей программы, поэтому никто не может знать, хорошо ли работала моя программа Я немного смущен.

2
задан Ahmad 25 June 2019 в 19:38
поделиться

4 ответа

Это по сути то, что @Brandon уже сказал в комментариях.

main должен возвращать код выхода / ошибки программы. В соглашении Unix 0 используется для указания отсутствия ошибки (значение ошибки «ложь»). А затем положительные значения используются для указания того, что произошла ошибка и какая это была ошибка.

6
ответ дан Edward Minnix 25 June 2019 в 19:38
поделиться

Ваша логика имела бы смысл, если бы возвращаемое значение main было интерпретировано как логическое значение, но это не так. Возврат из первоначального вызова к main подобен вызову функции exit: она сообщает о состоянии завершения системе, в которой вы работаете.

Стандарт C определяет 3 переносимых состояния выхода:

  • 0, указывающих на успех
  • EXIT_SUCCESS, также указывающих на успех
  • EXIT_FAILURE, указывающих fail

(последние два являются макросами, определенными в <stdlib.h>.)

В Unix допускается любое 8-битное значение (0 .. 255). Все ненулевые значения интерпретируются как коды ошибок. Не существует универсального соглашения о том, что означает любое число, просто то, что 0 представляет успех, а все остальное - своего рода провал.

Что касается того, кто может использовать возвращаемое значение: В Unix родительский процесс может использовать wait или waitpid, чтобы получить статус выхода прерванного потомка.


В стандартной библиотеке C функции, выполняющие действие, обычно не возвращают статус «истина / ложь». (Тесты, такие как islower или isdigit, но у них нет других эффектов.) Например, remove (который удаляет файл) возвращает 0 в случае успеха и -1 в случае ошибки. Это также общий шаблон с системными вызовами Unix. Например, open возвращает дескриптор файла (неотрицательное целое число) при успехе и -1 при ошибке.

8
ответ дан melpomene 25 June 2019 в 19:38
поделиться

Существует разница между тем, что язык C считает true (не ноль) или false (ноль), и тем, какие значения (ы) использует операционная система указывают на нормальное завершение программы.

Чтобы быть строго правильными, программы на С должны завершиться с кодом EXIT_SUCCESS для нормального завершения программы или EXIT_FAILURE для аварийного завершения. EXIT_SUCCESS будет отображаться в любом коде, используемом базовой платформой для указания успеха, который может быть или не быть 0.

2
ответ дан John Bode 25 June 2019 в 19:38
поделиться

Это действительно вопрос, который вы задаете программе, когда она заканчивается.

Случай 1:

Вы потерпели неудачу?

Случай 2:

Вы прошли?

В первом случае «хорошая программа» вернет false (он же ноль)

Во втором случае «хорошая программа» вернет true (он же не ноль).

Консенсус заключается в использовании варианта 1, т. Е. «Вы потерпели неудачу?». Поэтому безотказная программа возвращает ноль, чтобы сказать «Я не ошибся».

Преимущество этого подхода заключается в том, что ненулевые значения могут использоваться для выражения различных видов отказов, в то время как ноль всегда означает «нет отказов»

.
1
ответ дан 4386427 25 June 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: