В чем разница между выходом (0) и выходом (1) в C?

97

Кто-нибудь может мне сказать? В чем разница между exit(0)и exit(1)в языке C?

Ю Хао
источник

Ответы:

118

В чем разница между exit(0)и exit(1)в языке C?

exit(0)указывает на успешное завершение программы и полностью переносимо, в то время как
exit(1)(обычно) указывает на неудачное завершение. Однако его использование непереносимо.

Обратите внимание, что стандарт C определяет EXIT_SUCCESSи EXIT_FAILUREдля возврата статуса завершения из программы C.

0и EXIT_SUCCESSявляются значениями, указанными в стандарте для индикации успешного завершения, однако это только EXIT_FAILUREстандартное значение для возврата неудачного завершения. 1хотя и используется во многих реализациях.


Ссылка:

C99 Стандарт: 7.20.4.3 exitФункция,
пункт 5

Наконец, управление возвращается в среду хоста. Если значение статуса равно нулю или EXIT_SUCCESS, возвращается форма успешного завершения статуса, определяемая реализацией. Если значение статуса равно EXIT_FAILURE, возвращается форма, определяемая реализацией неудачного завершения статуса. В противном случае возвращаемый статус определяется реализацией.

Алок Сохранить
источник
1
Вы можете объяснить непереносимость? В частности, ненулевые коды выхода указывают на разные режимы отказа. Обычно приложение использует это для предоставления дополнительной информации. EXIT_FAILUREТаким образом, одной константы ( ) недостаточно.
Конрад Рудольф
@KonradRudolph: Я добавил соответствующую цитату. Надеюсь, это поможет.
Alok Save
1
@Als: POSIX - это стандарт. Стандарт C может сказать , « от реализации» , но это не равносильно тому, «не переносимы», когда реализация на самом деле сделать согласны на конвенции.
Cat Plus Plus
1
@PeterM: Найдите мне платформу, которая не использует это соглашение. Скорее всего, это будет какая-то специализированная / встраиваемая / автономная / любая среда, переносимость которой exitбудет наименьшей из ваших проблем (черт возьми, там может и не быть доступной библиотеки C. НИЧЕГО НЕ ПОРТАТИВНО !!! 111).
Cat Plus Plus
3
@CatPlusPlus: в OpenVMS вызов exitс любым нечетным значением означает успех. exit(0)рассматривается как частный случай ради соответствия C. Да, POSIX - это стандарт, но не все системы ему соответствуют. Если вы хотите написать код, предполагающий POSIX, вы можете это сделать, но это ограничивает переносимость вашего кода.
Кейт Томпсон
12

exit в языке C принимает целое число, представляющее статус выхода.

Выход из успеха

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

Выход из строя

Статус выхода 1 считается ошибкой и чаще всего означает, что программа должна была выйти по какой-либо причине и не смогла успешно завершить все в обычном потоке программы.

Вот ресурс GNU, говорящий о статусе выхода.


Как заявил @Als, следует использовать две константы вместо 0 и 1.

EXIT_SUCCESS определяется стандартом равным нулю.

EXIT_FAILURE не ограничивается стандартом как единое целое, но многие системы реализуют его как единое целое.

Сэм ДеХаан
источник
9

exit(0)указывает, что программа завершилась без ошибок. exit(1)указывает на то, что произошла ошибка.

Вы можете использовать разные значения, кроме 1различий между различными типами ошибок.

щ
источник
3

Разница в том, что значение, возвращаемое среде, 0в первом случае и 1во втором случае:

$ ./prog_with_exit_0
$ echo $?
0
$

и

$ ./prog_with_exit_1
$ echo $?
1
$

Также обратите внимание, что значение макроса EXIT_SUCCESSи EXIT_FAILUREиспользуется в качестве аргумента exitфункции определяется реализацией, но обычно устанавливается соответственно 0на ненулевое число. (POSIX EXIT_SUCCESSдолжен быть 0). Так обычно exit(0)означает успех и exit(1)неудачу.

exitВызов функции с аргументом в mainфункции эквивалентно утверждения returnс тем же аргументом.

ауа
источник
2

exit - это системный вызов, используемый для завершения запущенного процесса, из которого он был вызван. Параметр выхода используется для информирования родительского процесса о состоянии дочернего процесса. Таким образом, exit (0) может использоваться (и часто используется) для обозначения успешного выполнения процесса и exit (1) для обозначения ошибки. ссылка на ссылку

махтаб
источник
1

exit(0) означает, что программа (процесс) завершается нормально успешно.

exit(1) означает, что программа (процесс) завершается нормально безуспешно.

Если вы хотите наблюдать за этим, вы должны знать обработку сигналов и управление процессами в Unix ...

знаю про sigaction, watipid()..for () ... такие .... API ...........

Никундж Патель
источник
1

exit(0)вести себя как return 0в main()функции, exit(1)вести себя как return 1. Стандарт заключается в том, что эта mainфункция return 0, если программа завершилась успешно, а значение, отличное от нуля, означает, что программа была завершена с какой-то ошибкой.

Томаш Шима
источник
1

exit (0) эквивалентен exit (EXIT_SUCCESS).

exit (1) эквивалентен exit (EXIT_FAILURE).

При сбое обычно возвращается любое положительное значение для выхода из процесса, которое можно найти в оболочке с помощью $ ?.

Значение больше 128, что обусловлено прекращением сигнала. Поэтому, если какая-либо команда оболочки завершается сигналом, статус возврата должен быть (128 + номер сигнала).

Например:

Если какая-либо команда оболочки завершается SIGINT, тогда $? даст 130 (128 + 2) (здесь 2 - номер сигнала для SIGINT, проверьте с помощью kill -l)

Sandeep_black
источник
0

Когда исполняемый файл завершается (завершается), он возвращает значение оболочке, которая его запустила. exit(0)обычно указывает на то, что все в порядке, в то время как exit(1)указывает на то, что что-то пошло не так.

Эд Хил
источник
0

exit function. В языке программирования C функция выхода вызывает все функции, зарегистрированные с помощью при выходе, и завершает программу.

exit(1)означает, что программа (процесс) завершилась неудачно. Буферы файлов очищаются, потоки закрываются, а временные файлы удаляются.

exit(0) означает, что Программа (Процесс) завершена успешно.

Рашид Таттайил
источник