La main
funzione deve essere dichiarata come funzione non membro nello spazio dei nomi globale. Ciò significa che non può essere una funzione membro statica o non statica di una classe, né può essere collocata in uno spazio dei nomi (anche lo spazio dei nomi senza nome).
Il nome main
non è riservato in C ++ tranne che come funzione nello spazio dei nomi globale. Sei libero di dichiarare altre entità nominate main
, tra cui classi, variabili, enumerazioni, funzioni membro e funzioni non membri non presenti nello spazio dei nomi globale.
È possibile dichiarare una funzione denominata main
come funzione membro o in uno spazio dei nomi, ma tale funzione non sarebbe la main
funzione che designa l'inizio del programma.
La main
funzione non può essere dichiarata come static
o inline
. Inoltre non può essere sovraccaricato; può esserci solo una funzione nominata main
nello spazio dei nomi globale.
Il main
funzione non può essere utilizzata nel tuo programma: non ti è consentito chiamare la main
funzione da nessuna parte del tuo codice, né puoi prendere il suo indirizzo.
Il tipo di restituzione di main
deve essereint
. Nessun altro tipo restituito è consentito (questa regola è in grassetto perché è molto comune vedere programmi errati che dichiaranomain
con un tipo di ritorno void
; questa è probabilmente la regola più frequentemente violata relativa alla main
funzione).
Ci sono due dichiarazioni di main
che devono essere consentite:
int main() // (1)
int main(int, char*[]) // (2)
Nel (1) non ci sono parametri.
In (2) , ci sono due parametri e sono convenzionalmente nominati argc
e argv
, rispettivamente. argv
è un puntatore a un array di stringhe C che rappresentano gli argomenti del programma. argc
è il numero di argomenti nella argv
matrice.
Generalmente, argv[0]
contiene il nome del programma, ma non è sempre così. argv[argc]
è garantito per essere un puntatore nullo.
Si noti che poiché un argomento di tipo array (come char*[]
) è in realtà solo un argomento di tipo puntatore sotto mentite spoglie, i due seguenti sono entrambi modi validi per scrivere (2) ed entrambi significano esattamente la stessa cosa:
int main(int argc, char* argv[])
int main(int argc, char** argv)
Alcune implementazioni possono consentire altri tipi e numeri di parametri; dovresti controllare la documentazione della tua implementazione per vedere cosa supporta.
main()
si prevede che restituisca zero per indicare il successo e diverso da zero per indicare il fallimento. Non è necessario scrivere esplicitamente return
un'istruzione in main()
: se si lascia main()
restituire senza un'istruzione esplicita return
, è lo stesso di se si fosse scritto return 0;
. I seguenti duemain()
funzioni hanno lo stesso comportamento:
int main() { }
int main() { return 0; }
Esistono due macro EXIT_SUCCESS
e EXIT_FAILURE
, definite in<cstdlib>
che possono anche essere restituite main()
per indicare rispettivamente successo e fallimento.
Il valore restituito da main()
viene passato alla exit()
funzione, che termina il programma.
Si noti che tutto ciò si applica solo durante la compilazione per un ambiente ospitato (informalmente, un ambiente in cui si dispone di una libreria standard completa e c'è un sistema operativo che esegue il programma). È anche possibile compilare un programma C ++ per un ambiente indipendente (ad esempio alcuni tipi di sistemi incorporati), nel qual caso l'avvio e la chiusura sono completamente definiti dall'implementazione e main()
potrebbe non essere nemmeno necessaria una funzione. Se stai scrivendo C ++ per un moderno sistema operativo desktop, stai compilando per un ambiente ospitato.
main
tornare in C e C ++ .