Функция main
должна быть объявлена как функция, не являющаяся членом в глобальном пространстве имен. Это означает, что он не может быть статической или нестатической функцией-членом класса и не может быть помещен в пространство имен (даже безымянное пространство имен).
Имя main
не зарезервировано в C ++, за исключением функции в глобальном пространстве имен. Вы можете объявлять другие сущности с именем main
, включая, помимо прочего, классы, переменные, перечисления, функции-члены и функции, не являющиеся членами, не в глобальном пространстве имен.
Вы можете объявить функцию с именем main
как функцию-член или в пространстве имен, но такая функция не будет функцией main
, определяющей место запуска программы.
Функция main
не может быть объявлена как static
или inline
. Его тоже нельзя перегружать; в глобальном пространстве имен может быть только одна функция с именем main
.
Функцию main
нельзя использовать в вашей программе: вам не разрешено вызывать функцию main
из любого места вашего кода, а также вам не разрешено брать ее адрес.
Тип возврата main
должен быть int
. Никакой другой тип возврата не разрешен (это правило выделено жирным шрифтом, потому что очень часто можно увидеть некорректные программы, которые объявляют main
с типом возврата void
; это, вероятно, наиболее часто нарушаемое правило, касающееся функции main
).
Должны быть разрешены два объявления main
:
int main() // (1)
int main(int, char*[]) // (2)
В (1) параметров нет.
В (2) есть два параметра, которые условно называются argc
и argv
соответственно. argv
- указатель на массив строк C, представляющих аргументы программы. argc
- количество аргументов в массиве argv
.
Обычно argv[0]
содержит название программы, но это не всегда так. argv[argc]
гарантированно будет нулевым указателем.
Обратите внимание: поскольку аргумент типа массива (например, char*[]
) на самом деле является просто замаскированным аргументом типа указателя, следующие два являются допустимыми способами записи (2), и оба они означают одно и то же:
int main(int argc, char* argv[])
int main(int argc, char** argv)
Некоторые реализации могут допускать другие типы и количество параметров; вам нужно будет проверить документацию своей реализации, чтобы узнать, что она поддерживает.
Ожидается, что main()
вернет ноль для обозначения успеха и ненулевое значение для обозначения неудачи. От вас не требуется явно писать return
оператор в main()
: если вы позволите main()
вернуться без явного return
оператора, это будет так же, как если бы вы написали return 0;
. Следующие две main()
функции имеют одинаковое поведение:
int main() { }
int main() { return 0; }
Есть два макроса, EXIT_SUCCESS
и EXIT_FAILURE
, определенные в <cstdlib>
, которые также могут быть возвращены из main()
для обозначения успеха и неудачи соответственно.
Значение, возвращаемое main()
, передается функции exit()
, которая завершает программу.
Обратите внимание, что все это применимо только при компиляции для размещенной среды (неформально, среды, в которой у вас есть полная стандартная библиотека и есть ОС, запускающая вашу программу). Также можно скомпилировать программу на C ++ для автономной среды (например, для некоторых типов встроенных систем), и в этом случае запуск и завершение полностью определяются реализацией, а функция main()
может даже не потребоваться. Однако если вы пишете C ++ для современной настольной ОС, вы компилируете для размещенной среды.
person
James McNellis
schedule
17.11.2010
main
возвращаться в C и C ++. - person Jonathan Leffler   schedule 18.05.2014