Некоторые компиляторы С++ позволяют основной функции иметь возвращаемый тип void
. Но не требуется ли операционная система вернуть значение типа int
, чтобы указать, хорошо ли программа закончилась или нет?
С++ void return type main()
Ответ 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, являющимся хорошим и чистым выходом, и что-либо еще, указывающее, что ваша программа сделала что-то неправильно.