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 ++ .