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]
гарантированно будет нулевым указателем.
Обратите внимание, что поскольку аргумент типа массива (like char*[]
) на самом деле является просто скрытым аргументом типа указателя, следующие два являются допустимыми способами write (2), и оба они означают одно и то же:
int main(int argc, char* argv[])
int main(int argc, char** argv)
Некоторые реализации могут разрешать другие типы и числа параметров; вам нужно будет проверить документацию вашей реализации, чтобы увидеть, что она поддерживает.
main()
как ожидается, вернет ноль, чтобы указать успех и ненулевое, чтобы указать сбой. Вы не обязаны явно писать return
утверждение в main()
: если вы разрешите main()
return без явного return
утверждения, оно будет таким же, как если бы вы написали return 0;
. Следующие две main()
функции имеют одинаковое поведение:
int main() { }
int main() { return 0; }
Есть два макроса, EXIT_SUCCESS
и EXIT_FAILURE
, определенные в <cstdlib>
этом, также могут быть возвращены из, main()
чтобы указать успех и неудачу, соответственно.
Возвращаемое значение main()
передается в exit()
функцию, которая завершает программу.
Обратите внимание, что все это применимо только при компиляции для размещенной среды (неофициально, среды, в которой у вас есть полная стандартная библиотека и есть ОС, выполняющая вашу программу). Также возможно скомпилировать программу на C ++ для автономной среды (например, некоторых типов встроенных систем), в этом случае запуск и завершение полностью определяются реализацией, и main()
функция может даже не потребоваться. Если вы пишете C ++ для современной настольной ОС, вы компилируете для размещенной среды.
main
возвращаться в C и C ++ , или является его копией .