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 ++ для сучасної настільної ОС, ви збираєтеся для розміщеного середовища.
main
повертатися в C та C ++ .