Почему возвращаемое значение по умолчанию основного 0 и не EXIT_SUCCESS?

Можно протестировать частный с Отражением, но это будет боль позже. Я думаю, что необходимо поместить тест в тот же блок (или пакет) и попытаться использовать Внутренний. Таким образом, у Вас есть некоторая защита, и можно протестировать материал, который Вы хотите протестировать.

23
задан durron597 22 June 2015 в 15:05
поделиться

8 ответов

Возвращение нуля из main () , по сути, делает то же самое, что вы просите. Возвращение нуля из main () не обязательно должно возвращать ноль в среду хоста.

Из стандартного документа C90 / C99 / C ++ 98:

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

35
ответ дан 29 November 2019 в 00:58
поделиться

На самом деле, return 0 не обязательно возвращает 0! Я цитирую здесь стандарт C, потому что это то, что я знаю лучше всего.

О return в main () :

5.1.2.2.3 Завершение программы

] Если тип возврата основной функции является типом, совместимым с int , возврат из первоначального вызова функции main эквивалентен вызову exit функция со значением, возвращаемым функцией main в качестве аргумента;

About exit () :

7.20.4.3 Функция выхода
Сводка

 #include 
void exit (int status);
 

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

18
ответ дан 29 November 2019 в 00:58
поделиться

Стандарт просто определяет, каким должно быть значение, если оно не установлено явно. Разработчики должны либо явно установить возвращаемое значение, либо принять соответствующую семантику для значения по умолчанию. Я не думаю, что язык пытается навязать разработчикам какую-либо семантику.

5
ответ дан 29 November 2019 в 00:58
поделиться

0 - стандартный (успешный) код выхода для всех систем POSIX и всех известных мне систем! Я думаю, что так было с незапамятных времен (или, по крайней мере, с тех пор, как это стало в Unix ...), поэтому я бы сказал именно по этой причине.

Какая система, которую вы знаете, отличается?

4
ответ дан 29 November 2019 в 00:58
поделиться

0 в качестве кода возврата для успеха, а положительные целые числа в качестве ошибок являются стандартом в C и Unix. Эта схема была выбрана потому, что обычно не важно, почему программа преуспела , а только потому, что она сделала это. С другой стороны, у программы есть много способов выйти из строя с ошибкой, и эта информация часто интересует. Следовательно, имеет смысл использовать скалярное значение для успеха и диапазон значений для ошибки. Использование положительных целых чисел - это соглашение C, сохраняющее память, поскольку они позволяют определять код ошибки как целое число без знака.

3
ответ дан 29 November 2019 в 00:58
поделиться

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

0
ответ дан 29 November 2019 в 00:58
поделиться

Стандарты компьютерного языка говорят, что программа, написанная на язык должен делать, и что будет. В этом случае стандарты C и C ++ говорят, что, помимо прочего, возврат 0 сигнализирует об успехе.

Реализации языка позволяют запускать программы в определенных реализациях. Задача разработчика - выяснить, как заставить ввод-вывод работать в соответствии со стандартом, или предоставить ОС правильный код результата.

То, что делает программа, и то, что видит ОС, не обязательно должны совпадать. Все, что необходимо, это чтобы программа работала так, как указано в стандарте на данной ОС.

1
ответ дан 29 November 2019 в 00:58
поделиться

OS / 360 и последующие используют числовой код выхода, 0 обычно является успешным, 4 для предупреждений (например, компилятор, который сгенерировал предупреждающее сообщение), 8 для ошибок и 12 для особо серьезных ошибок. (например, невозможность открыть SYSPRINT, стандартный модуль вывода).

2
ответ дан 29 November 2019 в 00:58
поделиться
Другие вопросы по тегам:

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