Подтвердить что ты не робот

EXIT_FAILURE vs exit (1)?

Какая разница? Что является предпочтительным, или когда я должен использовать каждый из них соответственно?

4b9b3361

Ответ 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_SUCCESS0 и 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.