La mainfunzione 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 mainnon è 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 maincome funzione membro o in uno spazio dei nomi, ma tale funzione non sarebbe la mainfunzione che designa l'inizio del programma.
La mainfunzione non può essere dichiarata come statico inline. Inoltre non può essere sovraccaricato; può esserci solo una funzione nominata mainnello spazio dei nomi globale.
Il main funzione non può essere utilizzata nel tuo programma: non ti è consentito chiamare la mainfunzione da nessuna parte del tuo codice, né puoi prendere il suo indirizzo.
Il tipo di restituzione di maindeve 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 mainfunzione).
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 argce argv, rispettivamente. argvè un puntatore a un array di stringhe C che rappresentano gli argomenti del programma. argcè il numero di argomenti nella argvmatrice.
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 returnun'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_SUCCESSe 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.
maintornare in C e C ++ .