Должна ли функция int main () возвращать значение во всех компиляторах?

Почему нет необходимости включать оператор return при использовании int main () в некоторых компиляторах для C ++? Что относительно Turbo C ++?

В C ++, а также в C99 и C11, это специальное правило языка, которое, если stream управления достигает конца main функции, тогда функция impliclty возвращает 0 .

В C ++ и C99 / C11, без оператора return в основной функции, по умолчанию возвращается 0 ;

§ 3.6.1. Основная функция

Оператор возврата в основном имеет эффект выхода из основной функции (уничтожения любых объектов с автоматической продолжительностью хранения) и вызова std :: exit с возвращаемым значением в качестве аргумента. Если элемент управления достигает конца main без столкновения с оператором return, это эффект выполнения return 0;

также прочитайте главную страницу на главной странице C / C ++

Если возвращаемое значение не определено программистом, неявный возврат 0; в конце функции main () вставляется компилятором; это поведение требуется по стандарту C ++.

main должен возвращать int , некоторые компиляторы, включая Turbo C ++, могут допускать другие возвращаемые значения, особенно void main , но это неправильно, никогда не используйте это.

Однако в C ++, если вы явно не возвращаете значение в main , это то же самое, что и return 0;

C ++ 11 §3.6.1 Раздел основных функций 5

Оператор возврата в основном имеет эффект выхода из основной функции (уничтожения любых объектов с автоматической продолжительностью хранения) и вызова std :: exit с возвращаемым значением в качестве аргумента. Если элемент управления достигнет конца main без столкновения с оператором return, эффект заключается в выполнении

 return 0; 

Обратите внимание, что для C это поддерживается только на C99 и позже, но не поддерживается C89.

В стандарте указано, что main вернет 0 если нет оператора return . Из параграфа 3.6.1 проекта стандарта C ++ :

return в main имеет эффект выхода из основной функции (уничтожения любых объектов с автоматическим временем хранения) и вызова std :: exit с возвращаемым значением в качестве аргумента. Если элемент управления достигнет конца main без столкновения с оператором return, эффект заключается в выполнении

  return 0; 

В проекте стандарта C99 в разделе 5.1.2.2.3 говорится:

Если тип возврата основной функции является типом, совместимым с int, возврат от начального вызова к основной функции эквивалентен вызову функции выхода со значением, возвращаемым главной функцией в качестве аргумента; завершает основную функцию, возвращает значение 0.

Из того, что я могу сказать, последняя версия Turbo C ++ довольно старая, и я не могу найти ничего, что определяет, какой стандарт, если он поддерживает.

Помимо соответствия произвольному языковому стандарту, нет веских причин возвращать значение, когда заканчивается основная функция.

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

Как заявили другие люди, некоторые компиляторы не требуют, чтобы вы явно return 0; однако, это всегда хорошая идея (если это возможно). Я бы отказался от использования любого компилятора, который запрещает вам возвращаться из вашей основной функции.

Я хотел бы отметить, что возвращаемое значение из int main очень важно и фактически имеет смысл.

Возвращаемое значение из основного иногда упоминается как exit status или error code из вашей программы, ноль указывает, что он успешно завершен. Другие программы и скрипты могут получить доступ к этому коду, чтобы определить, успешно ли выполнена ваша программа.

Дополнительная информация здесь: http://en.wikipedia.org/wiki/Exit_status

TC вернет EXIT_SUCCESS независимо от того, указывается я или нет.