Можно протестировать частный с Отражением, но это будет боль позже. Я думаю, что необходимо поместить тест в тот же блок (или пакет) и попытаться использовать Внутренний. Таким образом, у Вас есть некоторая защита, и можно протестировать материал, который Вы хотите протестировать.
Возвращение нуля из main ()
, по сути, делает то же самое, что вы просите. Возвращение нуля из main ()
не обязательно должно возвращать ноль в среду хоста.
Из стандартного документа C90 / C99 / C ++ 98:
Если значение статуса равно нулю или
EXIT_SUCCESS
, возвращается форма успешного завершения статуса, определяемая реализацией.
На самом деле, 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
, определяемая реализацией форма состояния успешного завершения является возвращается.
Стандарт просто определяет, каким должно быть значение, если оно не установлено явно. Разработчики должны либо явно установить возвращаемое значение, либо принять соответствующую семантику для значения по умолчанию. Я не думаю, что язык пытается навязать разработчикам какую-либо семантику.
0 - стандартный (успешный) код выхода для всех систем POSIX и всех известных мне систем! Я думаю, что так было с незапамятных времен (или, по крайней мере, с тех пор, как это стало в Unix ...), поэтому я бы сказал именно по этой причине.
Какая система, которую вы знаете, отличается?
0 в качестве кода возврата для успеха, а положительные целые числа в качестве ошибок являются стандартом в C и Unix. Эта схема была выбрана потому, что обычно не важно, почему программа преуспела , а только потому, что она сделала это. С другой стороны, у программы есть много способов выйти из строя с ошибкой, и эта информация часто интересует. Следовательно, имеет смысл использовать скалярное значение для успеха и диапазон значений для ошибки. Использование положительных целых чисел - это соглашение C, сохраняющее память, поскольку они позволяют определять код ошибки как целое число без знака.
Если бы вы также думали о том, почему код ошибки для успеха равен 0, а не любому другому значению, я бы добавил, что исторически это могло быть связано с соображениями производительности, поскольку сравнение с 0 было довольно незначительным быстрее (я думаю, что в современных архитектурах может быть то же самое, что и с любым числом), и обычно вы не проверяете конкретный код ошибки, просто если он был успешным или какой-либо ошибкой (поэтому имеет смысл использовать для этого самое быстрое сравнение) .
Стандарты компьютерного языка говорят, что программа, написанная на язык должен делать, и что будет. В этом случае стандарты C и C ++ говорят, что, помимо прочего, возврат 0 сигнализирует об успехе.
Реализации языка позволяют запускать программы в определенных реализациях. Задача разработчика - выяснить, как заставить ввод-вывод работать в соответствии со стандартом, или предоставить ОС правильный код результата.
То, что делает программа, и то, что видит ОС, не обязательно должны совпадать. Все, что необходимо, это чтобы программа работала так, как указано в стандарте на данной ОС.
OS / 360 и последующие используют числовой код выхода, 0
обычно является успешным, 4
для предупреждений (например, компилятор, который сгенерировал предупреждающее сообщение), 8
для ошибок и 12
для особо серьезных ошибок.
(например, невозможность открыть SYSPRINT, стандартный модуль вывода).