По предложению пользователя PaperBirdMaster я решил задать вопрос, указанный в заголовке этого поста.
По сути, как я уже упоминал указанному пользователю, я видел в разных ответах SO, что в С++ нет необходимости включать инструкцию return 0;
в функцию, main
поскольку компилятор может включать указанную инструкцию самостоятельно. Сколько правды в приведенном выше утверждении?
Лично я предпочитаю включать, return 0;
потому что это похоже на использование return
внутри функции, поскольку по определению функции возвращают значение. Другое дело , если бы main
он объявил его как void main()
, что не является стандартным, но, по крайней мере, допустимо, например, в Visual Studio, и там он увидел бы необходимость включить какой-то return
.
С другой стороны, в связи со всем вышесказанным, насколько правомерно использование другого типа return
like, например, return EXIT_SUCCESS;
, который можно найти в одной из книг по C++ Луиса Джойанеса.
Заранее спасибо за ваши ответы и/или комментарии.
Глядя на черновик C++14 , в разделе 3.6.1 мы находим следующее:
Что говорит о следующем:
Таким образом, ответ НЕТ , не обязательно включать оператор
return
в основную функцию .Да, обязательно будет добавление этой инструкции, когда приложению нужно будет возвращать разные значения в зависимости от результата выполнения (например, для индикации ошибок).
Если мы читаем раздел 2 вышеупомянутого раздела (3.6.1):
Это в основном означает, что основная функция должна возвращать тип
int
. Конечно, из соображений совместимости есть компиляторы, которые проглатывают ... но будьте осторожны сvoid
этим, потому что ничто не гарантирует, что следующая версия компилятора примет и эту, и многие другие лицензии... вы можете оказаться в ситуации приходится редактировать десятки строк кода только для того, чтобы перекомпилировать программу.EXIT_SUCCESS
не тип, а константа:И он доступен как для C, так и для C++ через
stdlib.h
илиcstdlib
.Следовательно,
EXIT_SUCCESS
в вашем случае это эквивалентно установкеreturn 0;
.Так зачем использовать
EXIT_SUCCESS
, если вы пишете больше?Что ж, имейте в виду, что и C, и C++ не были разработаны для конкретной архитектуры... если вы обнаружите, что у вас есть операционная система, в которой приложение должно возвращать значение, отличное от 0, когда оно завершается правильно, макрос будет адаптироваться без проблемы, пока ему
0
придется модифицировать его вручную.Правда, с нюансами.
main
, поведение которого определено.return
кроме как в случаеmain
, но он делает это, чтобы следовать стандарту, а не потому, что это свободный выбор компилятора.В стандарте С++ соответствующий текст по первому пункту (перевод и выделение мое):
Соответствующий текст по второму пункту (перевод и выделение мое):
Вывод.
Хотя верно то, что компилятор C++, следующий стандарту, ведет себя определенным образом с функциями
main
без оператораreturn
, я (лично) возражаю против этого по следующим причинам:main
были и другие явные возвраты, было бы еще более неприятно полагаться на одинreturn
неявный, в то время как другие не были 1 .В конце можно добавить комментарий,
main
чтобы показать это намерение:Но гораздо проще просто написать
return
соответствующее заявление!Объясняя эту тему утверждения « возврат 0; »; Что это делает, так это завершает функцию и возвращает управление туда, где функция была вызвана. Например: в случае простой программы на C++, которая пишет "Hello World"; что делает эта инструкция, так это завершает " main " и возвращает управление операционной системе нашей машины; значение 0 сообщает операционной системе, что программа завершилась успешно. Согласно последней версии C++; этот возврат 0 можно опустить и программа будет работать нормально!
Я понимаю аргументы и хорошие практики программирования. Но выходя за рамки соглашения, вы можете вернуть 99, и это будет иметь смысл только для вас, манипулируя main с какой-либо консоли и получая доступ к этому возвращаемому значению.