Теперь у вас есть концептуальные инструменты, чтобы понять, как на самом деле работает функция
main()
. Когда программа выполняется, операционная система делает вызов функции
main()
. Затем выполняется переход к началу функции
main()
. Операторы в
main()
выполняются последовательно. Наконец,
main()
возвращает целочисленное значение (обычно
0
), и ваша программа завершается.
В C++ запрещен явный вызов функции main().
Примечание
В языке C допускается явный вызов main()
, поэтому некоторые компиляторы C++ позволяют это делать из соображений совместимости.
Коды состояния
Вам может быть интересно, почему мы возвращаем 0 из main()
и когда мы можем вернуть что-то другое.
Возвращаемое значение из main()
иногда называют кодом состояния (или реже кодом выхода, или редко кодом возврата). Код состояния используется для того, чтобы сообщить, была ли ваша программа успешной или нет.
По общему правилу, код состояния 0
означает, что программа выполнилась нормально (то есть программа выполнилась и вела себя так, как ожидалось).
Лучшая практика
Ваша главная функция должна возвращать значение 0, если программа выполнилась нормально.
Ненулевой код состояния часто используется для обозначения какого-то сбоя (и хотя это прекрасно работает в большинстве операционных систем, строго говоря, переносимость не гарантируется).
Для продвинутых читателей
Стандарт C++ определяет значение только трех кодов состояния: 0
, EXIT_SUCCESS
и EXIT_FAILURE
. 0
и EXIT_SUCCESS
означают, что программа выполнена успешно. EXIT_FAILURE
означает, что программа не была успешно выполнена. EXIT_SUCCESS
и EXIT_FAILURE
- это макросы препроцессора, определенные в заголовке <cstdlib>:
#include // для EXIT_SUCCESS и EXIT_FAILURE
int main()
{
return EXIT_SUCCESS;
}
Если вы хотите добиться максимальной переносимости, используйте только 0
или EXIT_SUCCESS
для обозначения успешного завершения или EXIT_FAILURE
для обозначения неуспешного завершения.
Дополнительно
Код состояния передается обратно в операционную систему. ОС обычно делает код состояния доступным для той программы, которая запустила программу, вернувшую код состояния. Это обеспечивает грубый механизм для любой программы, запускающей другую программу, чтобы определить, успешно ли запущенная программа выполнилась или нет.