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 ++ , или является его копией .