Какая разница? Что является предпочтительным, или когда я должен использовать каждый из них соответственно?
EXIT_FAILURE vs exit (1)?
Ответ 1
exit(1)
(обычно) указывает на неудачное завершение. Однако его использование не переносится. Например, на OpenVMS, exit(1)
фактически указывает на успех.
Только EXIT_FAILURE
является стандартным значением для возврата неудачного завершения, но 1
используется для одного и того же во многих реализациях.
Итак, чтобы подвести итог:
Если вы хотите написать совершенно портативное использование кода,
EXIT_FAILURE
для случая отказа. В то время,
Вы можете использовать либо exit(0)
, либо EXIT_SUCCESS
для случая успеха.
Обратите внимание, что EXIT_SUCCESS
или 0
совпадают.
Ссылка:
C99 Стандарт: 7.20.4.3 Функция exit
Параграф 5
Наконец, управление возвращается в среду хоста. Если значение статуса
zero
илиEXIT_SUCCESS
, определяемая реализацией форма успешного успешного завершения вернулся. Если значение статусаEXIT_FAILURE
, форма, определяемая реализацией статуса неудачного завершения возвращается. В противном случае возвращается статус реализация-де определено.
Ответ 2
Для действительно портативного кода предпочтительнее EXIT_FAILURE
. Стандарт C определяет только три значения: EXIT_FAILURE
, 0
и EXIT_SUCCESS
(с 0
и EXIT_SUCCESS
по существу синонимичными).
С практической точки зрения большинство типичных систем принимают и другие значения. Если память будет использоваться, Linux позволит вам вернуть любое 8-битное значение и 16-битные значения Windows. Если вы, честно говоря, не заботитесь о переносе на мэйнфрейм IBM, VMS и т.д., Скорее всего, вам не все равно, что большинство систем не поддерживают как минимум 8-битные возвращаемые значения.
Ответ 3
Используйте EXIT_FAILURE
. Это постоянная, которая используется во всей ОС. Его значение может быть чем-то иным, чем 1, а также более описательным в коде.
Ответ 4
Существуют соглашения о том, какие значения статуса должны возвращаться некоторыми программами. Наиболее распространенным соглашением является просто 0 для успеха и 1 для отказа. Программы, которые выполняют сравнение, используют другое соглашение: они используют статус 1 для указания несоответствия, а статус 2 указывает на невозможность сравнения. Ваша программа должна следовать существующей конвенции, если существующая конвенция имеет смысл для нее.
Некоторые не-POSIX-системы используют разные соглашения для статуса выхода значения.
For greater portability
, вы можете использовать макросыEXIT_SUCCESS
иEXIT_FAILURE
для обычного значения статуса для успеха и неудача, соответственно. Они объявлены в файле stdlib.h.