Die mainFunktion muss im globalen Namespace als Nichtmitgliedsfunktion deklariert werden. Dies bedeutet, dass es weder eine statische oder nicht statische Elementfunktion einer Klasse sein noch in einem Namespace (auch nicht im unbenannten Namespace) platziert werden kann.
Der Name mainist in C ++ nur als Funktion im globalen Namespace reserviert. Es steht Ihnen frei, andere benannte Entitäten zu deklarieren main, darunter unter anderem Klassen, Variablen, Aufzählungen, Elementfunktionen und Nichtmitgliedsfunktionen, die nicht im globalen Namespace enthalten sind.
Sie können eine Funktion mainals Elementfunktion oder in einem Namespace deklarieren , aber eine solche Funktion ist nicht die mainFunktion, die angibt, wo das Programm startet.
Die mainFunktion kann nicht als staticoder deklariert werden inline. Es kann auch nicht überladen werden; mainIm globalen Namespace kann nur eine Funktion benannt sein .
Die mainFunktion kann in Ihrem Programm nicht verwendet werden: Sie dürfen die mainFunktion weder von einer beliebigen Stelle in Ihrem Code aus aufrufen noch ihre Adresse übernehmen.
Der Rückgabetyp von mainmuss seinint . Es ist kein anderer Rückgabetyp zulässig (diese Regel ist fett gedruckt, da häufig falsche Programme mainmit einem Rückgabetyp von deklariert werden void. Dies ist wahrscheinlich die am häufigsten verletzte Regel in Bezug auf die mainFunktion).
Es gibt zwei Erklärungen main, die erlaubt sein müssen:
int main() // (1)
int main(int, char*[]) // (2)
In (1) gibt es keine Parameter.
In (2) gibt es zwei Parameter , und sie werden in herkömmlicher Weise benannt argcund argvdargestellt. argvist ein Zeiger auf ein Array von C-Zeichenfolgen, die die Argumente für das Programm darstellen. argcist die Anzahl der Argumente im argvArray.
argv[0]Enthält normalerweise den Namen des Programms, dies ist jedoch nicht immer der Fall. argv[argc]ist garantiert ein Nullzeiger.
Beachten Sie, dass, da ein Array-Typ-Argument (wie char*[]) eigentlich nur ein getarntes Zeigertyp-Argument ist, die folgenden beiden gültige Schreibweisen (2) sind und beide genau dasselbe bedeuten:
int main(int argc, char* argv[])
int main(int argc, char** argv)
Einige Implementierungen erlauben möglicherweise andere Arten und Anzahlen von Parametern. Sie müssen die Dokumentation Ihrer Implementierung überprüfen, um festzustellen, was sie unterstützt.
main()Es wird erwartet, dass Null zurückgegeben wird, um Erfolg anzuzeigen, und Nicht-Null, um Fehler anzuzeigen. Sie müssen eine returnAnweisung nicht explizit schreiben in main(): Wenn Sie main()ohne explizite returnAnweisung zurückkehren lassen, ist dies dasselbe, als hätten Sie geschrieben return 0;. Die folgenden zwei main()Funktionen verhalten sich gleich:
int main() { }
int main() { return 0; }
Es gibt zwei Makros, EXIT_SUCCESSund EXIT_FAILUREdefiniert in <cstdlib>das kann auch von zurückgegeben werden main()Erfolg und Misserfolg , um anzuzeigen, respectively.
Der von zurückgegebene Wert main()wird an die exit()Funktion übergeben, die das Programm beendet.
Beachten Sie, dass all dies nur beim Kompilieren für eine gehostete Umgebung gilt (informell eine Umgebung, in der Sie über eine vollständige Standardbibliothek verfügen und auf einem Betriebssystem Ihr Programm ausgeführt wird). Es ist auch möglich, ein C ++ - Programm für eine freistehende Umgebung (z. B. einige Arten eingebetteter Systeme) zu kompilieren. In diesem Fall sind Start und Beendigung vollständig implementierungsdefiniert und eine main()Funktion ist möglicherweise nicht einmal erforderlich. Wenn Sie jedoch C ++ für ein modernes Desktop-Betriebssystem schreiben, kompilieren Sie für eine gehostete Umgebung.
mainin C und C ++ zurückgegeben werden soll , oder ist ein Duplikat davon .