Die main
Funktion 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 main
ist 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 main
als Elementfunktion oder in einem Namespace deklarieren , aber eine solche Funktion ist nicht die main
Funktion, die angibt, wo das Programm startet.
Die main
Funktion kann nicht als static
oder deklariert werden inline
. Es kann auch nicht überladen werden; main
Im globalen Namespace kann nur eine Funktion benannt sein .
Die main
Funktion kann in Ihrem Programm nicht verwendet werden: Sie dürfen die main
Funktion weder von einer beliebigen Stelle in Ihrem Code aus aufrufen noch ihre Adresse übernehmen.
Der Rückgabetyp von main
muss seinint
. Es ist kein anderer Rückgabetyp zulässig (diese Regel ist fett gedruckt, da häufig falsche Programme main
mit einem Rückgabetyp von deklariert werden void
. Dies ist wahrscheinlich die am häufigsten verletzte Regel in Bezug auf die main
Funktion).
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 argc
und argv
dargestellt. argv
ist ein Zeiger auf ein Array von C-Zeichenfolgen, die die Argumente für das Programm darstellen. argc
ist die Anzahl der Argumente im argv
Array.
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 return
Anweisung nicht explizit schreiben in main()
: Wenn Sie main()
ohne explizite return
Anweisung 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_SUCCESS
und EXIT_FAILURE
definiert 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.
main
in C und C ++ zurückgegeben werden soll , oder ist ein Duplikat davon .