С++ void return type main()

Некоторые компиляторы С++ позволяют основной функции иметь возвращаемый тип void. Но не требуется ли операционная система вернуть значение типа int, чтобы указать, хорошо ли программа закончилась или нет?

Ответ 1

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

Ответ 2

С++ позволяет основной функции иметь возвращаемый тип void

Нет, это не так.

Стандарт С++ требует только 2 разных типа основных подписей. Другие могут быть добавлены, если тип возврата int.

Реализации С++, которые допускают типы возвращаемого типа, неверны в терминах стандарта С++.

Стандарт С++ 03 S. 3.6.1-2:

Реализация не должна предопределять основную функцию. Эта функция не должна быть перегружена. Он должен имеют тип возвращаемого типа int, но в противном случае его тип определяется реализацией. Все реализации должны из следующих определений main:

int main() { /* ... */ } 
int main(int argc, char* argv[]) {/* ... */ }

Если вам нужен переносимый код на С++ или написать хорошие примеры на С++, вы должны всегда использовать один из двух вариантов выше.

Ответ 3

main возврат void принят для обратной совместимости, но это не является законным.

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

Ответ 4

Стандарт С++ не позволяет main() иметь возвращаемый тип void. Большинство компиляторов позволят ему пройти по историческим причинам.

Ответ 5

В языках, где a void return from main является законным (а не С++), ОС обычно видит возвращаемое значение 0 при нормальном (не исключительном) завершении программы.

Ответ 6

Вот почему void main() не допускается стандартным С++, хотя некоторые компиляторы (например, gcc) действительно позволяют это.

Чтобы сделать его коротким: всегда используйте int main(), никогда не void main().

Ответ 7

But doesn't OS require int type value returned to specify whether program 
ended well or not?

Почему это всегда? В окнах, когда вы дважды щелкаете по значку, процесс умирает после его окончания. OS не проверяет тип возврата там. Даже в Linux, если вы просто запускаете двоичный файл как. /runBinary, он просто запускается и завершается. ОС не показывает сообщение сам по себе, что оно не работает или не удается.

Все приведенные выше ответы правы, что стандарт говорит, что это int, но некоторые компиляторы также допускают пустоту.

Ответ 8

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