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

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

Ответ 1

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

Ответ 2

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

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

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

также читает wiki page Основная функция C/С++

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

Ответ 3

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

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

С++ 11 §3.6.1 Основная функция раздел 5

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

return 0;

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

Ответ 4

В стандарте указано, что main вернет 0, если нет инструкции return. Из черновик проекта С++ раздел 3.6.1 paragraph 5:

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

   return 0;

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

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

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

Ответ 5

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

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

Ответ 6

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

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

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

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

Ответ 7

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