Warum müssen wir in C++ int main
und nicht void main
verwenden?
Die kurze Antwort lautet, weil der C++ - Standard main()
benötigt, um int
zurückzugeben.
Wie Sie wahrscheinlich wissen, wird der Rückgabewert der Funktion main()
von der Laufzeitbibliothek als Exitcode für den Prozess verwendet. Sowohl Unix als auch Win32 unterstützen das Konzept einer (kleinen) Ganzzahl, die von einem Prozess zurückgegeben wird, nachdem er abgeschlossen wurde. Die Rückgabe eines Werts aus main()
bietet dem Programmierer eine Möglichkeit, diesen Wert anzugeben.
Die meisten Betriebssysteme berichten dem Benutzer oder dem aufrufenden Prozess, ob eine Anwendung erfolgreich war oder nicht. Dies ist besonders hilfreich bei Skripts, bei denen das Skript die Ergebnisse eines Programms bedingt verzweigen kann (wenn-dann). Etwas in der Art von:
// pseudo-code
screenscrape http://mydatasource.com > results.txt
if errorlevel == 0 then
processfile results.txt
else
echo Screen Scraping Failed!
end if
Dieser Ergebnisstatus erfolgt über den Rückgabewert von main.
Während einige Compiler Void-Main zulassen, erfordert der ANSI-Standard aus Gründen der Konsistenz und Einfachheit einen einzigen Prototyp von Main:
int main(int argc, char *argv[]);
Da in C Argumente vom Aufrufer bereinigt werden, kann der Autor von main die Argumente argc & argv nicht deklarieren oder verarbeiten. Wenn jedoch die Setup-Routinen, die main aufrufen, einen int-Rückgabewert erwarten und keinen finden, kann das Verhalten undefiniert sein.
Kurze Antwort:
Hauptgrund für den Wechsel
void main () {}
zu
int main () {}
in späteren Releases wurde Fehler gemeldet im Programm während der Ausführung an Betriebssystem aufgetreten, auf dem es läuft
return 0;
identifizieren Sie das Programm erfolgreich, wenn eine Zahl statt 0 zurückgegeben wird. Dies bedeutet, dass ein Fehler aufgetreten ist, dessen Fehlercode der von main zurückgegebene ist, wenn Sie mit codeblock IDE siehe im Build-Protokoll, wenn main normalerweise 0 zurückgibt
Process terminated with status 0
andernfalls wird der Statuscode rot angezeigt, was bedeutet, dass ein Fehler aufgetreten ist
Von Wikipedia:
Der von der Hauptfunktion zurückgegebene Wert wird zum Exit-Status des Prozesses. Der C-Standard schreibt jedoch nur zwei Werte vor:
EXIT_SUCCESS
(traditionell Null) undEXIT_FAILURE
. Die Bedeutung anderer möglicher Rückgabewerte ist implementierungsdefiniert.
Wie in C, weil der Prozess dem Betriebssystem einen Beendigungscode gibt.
Sie können entweder verwenden
int main (int argc, char ** argv)
{
return (0);
}
oder
int main (int argc, char ** argv)
{
exit (0);
}
Dies ist zumindest in C89 IIRC.
Da int der Rückkehrcode ist, kann ein Programm zum Betriebssystem zurückkehren.
Sie können diesen Wert abfragen, um zu prüfen, ob die Operation erfolgreich war.
Dies war äußerst hilfreich bei der Verwendung von Kommandozeilen-Skripts.
Vielleicht, weil es sinnvoll ist, den Statuscode der main()
-Methode sauber zu verlassen. In Java müssen wir dies mit System.exit()
nachahmen, was nicht alles so anmutig ist.
Wenn wir unser Programm zur Überprüfung ausführen, wird es erfolgreich ausgeführt oder nicht. Wenn also 0 zurückgegeben wird, bedeutet dies, dass es wahr ist und erfolgreich ausgeführt wurde. Wenn es 1 zurückgibt, wird es nicht erfolgreich ausgeführt. Dieser int
-Wert teilt dem Betriebssystem mit, ob das Programm erfolgreich ausgeführt wurde