main
Funkcja musi być zadeklarowany jako funkcja trzecich w globalnej przestrzeni nazw. Oznacza to, że nie może to być statyczna lub niestatyczna funkcja składowa klasy, ani nie może być umieszczona w przestrzeni nazw (nawet w nienazwanej przestrzeni nazw).
Nazwa main
nie jest zarezerwowana w C ++ z wyjątkiem funkcji w globalnej przestrzeni nazw. Możesz zadeklarować inne wymienione podmiotymain
, w tym między innymi klasy, zmienne, wyliczenia, funkcje składowe i funkcje niebędące członkami, które nie znajdują się w globalnej przestrzeni nazw.
Można zadeklarować funkcję nazwaną main
jako funkcja składowa lub w przestrzeni nazw, ale taka funkcja nie byłaby main
funkcją wyznaczającą miejsce rozpoczęcia programu.
main
Funkcja nie może być uznana jako static
lub inline
. Nie można go również przeciążać; main
w globalnej przestrzeni nazw może istnieć tylko jedna funkcja .
main
Funkcja nie może być używana w programie: nie wolno wywołać main
funkcję z dowolnego miejsca w kodzie, ani ty mogą brać swój adres.
Zwracany typ main
musi byćint
. Żaden inny typ zwracania nie jest dozwolony (ta reguła jest pogrubiona, ponieważ bardzo często można zobaczyć niepoprawne programy, które deklarują main
zwracany typ void
; jest to prawdopodobnie najczęściej naruszana reguła dotycząca main
funkcji).
Istnieją dwie deklaracje tego, main
co musi być dozwolone:
int main() // (1)
int main(int, char*[]) // (2)
W (1) nie ma parametrów.
W (2) są dwa parametry i są one umownie nazwaneargc
i argv
, odpowiednio. argv
jest wskaźnikiem do tablicy ciągów C reprezentujących argumenty programu. argc
to liczba argumentów w argv
tablicy.
Zwykle argv[0]
zawiera nazwę programu, ale nie zawsze tak jest. argv[argc]
na pewno jest pustym wskaźnikiem.
Zauważ, że ponieważ argument typu tablicowego (jak char*[]
) jest w rzeczywistości tylko argumentem typu wskaźnika w przebraniu, poniższe dwa są poprawnymi sposobami zapisu (2) i oba oznaczają dokładnie to samo:
int main(int argc, char* argv[])
int main(int argc, char** argv)
Niektóre implementacje mogą dopuszczać inne typy i liczby parametrów; musiałbyś sprawdzić dokumentację swojej implementacji, aby zobaczyć, co obsługuje.
main()
oczekuje, że zwróci zero, aby wskazać sukces i niezerowe, aby wskazać błąd. Nie musisz jawnie pisać return
instrukcji w main()
: jeśli pozwalasz na main()
powrót bez wyraźnego return
oświadczenia, jest to tak samo, jak gdybyś to napisał return 0;
. Następujące dwie main()
funkcje mają takie samo zachowanie:
int main() { }
int main() { return 0; }
Istnieją dwa makra, EXIT_SUCCESS
a EXIT_FAILURE
zdefiniowane w nich <cstdlib>
mogą być również zwracane zmain()
aby wskazać odpowiednio sukces i niepowodzenie.
Wartość zwracana przez main()
jest przekazywana doexit()
funkcji, która kończy działanie programu.
Zauważ, że wszystko to dotyczy tylko kompilacji dla środowiska hostowanego (nieformalnie, środowiska, w którym masz pełną bibliotekę standardową i system operacyjny, na którym działa twój program). Możliwe jest również skompilowanie programu w C ++ dla środowiska wolnostojącego (na przykład niektórych typów systemów wbudowanych), w którym to przypadku uruchomienie i zakończenie są całkowicie zdefiniowane przez implementację, a main()
funkcja może nawet nie być wymagana. Jeśli jednak piszesz C ++ dla nowoczesnego systemu operacyjnego dla komputerów stacjonarnych, kompilujesz dla środowiska hostowanego.
main
zwrócone w C i C ++ , lub jest jego duplikatem .