Почему нам нужно использовать int main
, а не void main
в C ++?
Почему нам нужно использовать int main, а не void main в C ++?
Ответы (8)
Короткий ответ заключается в том, что стандарт C ++ требует, чтобы main()
возвращал int
.
Как вы, наверное, знаете, значение, возвращаемое функцией main()
, используется библиотекой времени выполнения в качестве кода выхода для процесса. И Unix, и Win32 поддерживают концепцию (маленького) целого числа, возвращаемого процессом после его завершения. Возврат значения из main()
предоставляет программисту один способ указать это значение.
main
как int main(void)
, как int main(int argc, char *argv[])
или эквивалент, или или каким-либо другим способом, определяемым реализацией. Требования стандарта C ++ аналогичны, за исключением того, что main()
должен всегда быть определен для возврата int
. (Это относится только к размещенным средам; автономные (т. Е. Встроенные) системы могут определять точку входа программы любым удобным для них способом.)
- person Keith Thompson; 25.09.2012
void main() { ... }
; вы все равно можете использовать exit()
, чтобы вернуть код выхода в среду, или просто по умолчанию 0
, если вы дойдете до конца main
. Причина, по которой не следует использовать void main()
, заключается в том, что языковой стандарт не разрешает этого, равно как и double main(long long foo, time_t bar)
.
- person Keith Thompson; 25.09.2012
Большинство операционных систем сообщают пользователю или вызывающему процессу, было ли приложение успешным или нет. Это особенно полезно при написании сценариев, где сценарий может условно разветвляться (если-то) по результатам выполнения программы. Что-то вроде:
// pseudo-code
screenscrape http://mydatasource.com > results.txt
if errorlevel == 0 then
processfile results.txt
else
echo Screen Scraping Failed!
end if
Этот статус результата выполняется через возвращаемое значение main.
В то время как некоторые компиляторы допускают void main, для единообразия и простоты стандарт ANSI требует одного-единственного прототипа main:
int main(int argc, char *argv[]);
Поскольку в C аргументы очищаются вызывающей стороной, автор main может пренебречь объявлением или обработкой аргументов argc и argv. Однако, если процедуры настройки, вызывающие main, ожидают возвращаемого значения типа int и вместо этого не находят его, поведение может быть неопределенным.
Короткий ответ:
- Возвращаемое значение main полезно для написания сценариев.
- Процедуры установки и очистки, которые вызывают main, требуют согласованного интерфейса для использования.
Основная причина изменения
пустая функция() { }
to
int main () {}
в более поздних выпусках было необходимо уведомить об ошибке в программе во время выполнения в операционной системе, в которой она запущена.
return 0;
идентифицируйте программу, успешно выполненную, если возвращено какое-либо число, а не 0, что означает, что произошла какая-то ошибка, которая имеет код ошибки, который возвращается функцией main. если вы работаете в IDE кодового блока, посмотрите в журнале сборки, если основной возврат 0, он обычно отображается
Process terminated with status 0
иначе он отображает код состояния красным цветом, что означает, что произошла ошибка
Из Википедии:
Значение, возвращаемое основной функцией, становится статусом завершения процесса, хотя стандарт C приписывает конкретное значение только двум значениям:
EXIT_SUCCESS
(традиционно ноль) иEXIT_FAILURE
. Значение других возможных возвращаемых значений определяется реализацией.
Как и в C, потому что процесс выдаст ОС код выхода.
Вы можете использовать
int main (int argc, char ** argv)
{
return (0);
}
or
int main (int argc, char ** argv)
{
exit (0);
}
Это по крайней мере в C89 IIRC.
Поскольку int - это код возврата, программа может вернуться в ОС.
Вы можете запросить это значение, чтобы проверить, была ли операция успешной.
Это было чрезвычайно полезно при использовании сценариев командной строки.
Когда мы выполняем нашу программу, чтобы проверить, работает она успешно или нет. Поэтому, когда он возвращает 0, это означает, что он истинный и работает успешно, если он возвращает 1, он не запускается успешно, и это значение int
сообщает ОС, успешно ли выполнена программа или нет.
Возможно, потому что имеет смысл чисто выйти с кодом состояния из метода main()
. В Java мы должны эмулировать это с помощью System.exit()
, что не так уж и изящно.