betrachten Sie zum Beispiel folgenden Code
int main(int argc,char *argv[])
{
int *p,*q;
p = (int *)malloc(sizeof(int)*10);
q = (int *)malloc(sizeof(int)*10);
if (p == 0)
{
printf("ERROR: Out of memory\n");
return 1;
}
if (q == 0)
{
printf("ERROR: Out of memory\n");
exit(0);
}
return 0;
}
was gibt 0 zurück, gibt 1 zurück, exit (0) tut das obige Programm ... _. exit (0) beendet das gesamte Programm und die Steuerung verlässt die Schleife, aber was passiert, wenn 0 zurückkehrt, 1 zurückgeben, -1 zurückgeben .
return
von main()
ist äquivalent zu exit
das Programm beendet die Ausführung sofort mit exit status set als Wert, der an return
oder exit
übergeben wird.
return
in einer inneren Funktion (nicht main
) beendet sofort die Ausführung der spezifischen Funktion und gibt das aufgerufene Ergebnis an die aufrufende Funktion zurück.
exit
von einer beliebigen Stelle Ihres Codes aus wird die Programmausführung sofort beendet.
status 0 bedeutet, dass das Programm erfolgreich war.
ein anderer Status als 0 bedeutet, dass das Programm aufgrund eines Fehlers oder einer Anomalie beendet wurde.
Wenn Sie den Status mit einem anderen Wert als 0 beenden, sollten Sie eine Fehlernachricht an stderr
ausgeben. Verwenden Sie also printf
lieber etwas anderes
if(errorOccurred) {
fprintf(stderr, "meaningful message here\n");
return -1;
}
beachten Sie, dass (abhängig von dem Betriebssystem, in dem Sie sich befinden) einige Konventionen für Rückgabecodes gelten.
Google für "Exit Status Codes" oder ähnliches und Sie finden viele Informationen auf SO und anderswo.
Erwähnenswert ist, dass das Betriebssystem Ihr Programm möglicherweise mit bestimmten Beendigungsstatuscodes beendet, wenn Sie versuchen, ungültige Operationen wie das Lesen von Speicher auszuführen, auf den Sie keinen Zugriff haben.
return n
von Ihrer Haupteingabefunktion beendet Ihren Prozess und meldet dem übergeordneten Prozess (dem Prozess, der Ihren Prozess ausgeführt hat) das Ergebnis Ihres Prozesses. 0 bedeutet ERFOLG. Andere Codes zeigen normalerweise einen Fehler und seine Bedeutung an.
return
in der Funktion gibt die Ausführung an den Aufrufer zurück und exit
von der Funktion beendet das Programm.
in main
Funktion return 0
oder exit(0)
sind gleich, aber wenn Sie exit(0)
in eine andere Funktion schreiben, verlassen Sie das Programm von dieser Position.
die Rückgabe verschiedener Werte wie return 1
oder return -1
bedeutet, dass das Programm einen Fehler zurückgibt.
Wenn exit(0)
zum Beenden des Programms verwendet wird, werden Destruktoren für nicht statische Objekte mit lokalem Gültigkeitsbereich nicht aufgerufen. Destruktoren werden jedoch aufgerufen, wenn return 0 verwendet wird.
Um den Ausführungsstatus anzuzeigen.
status 0 bedeutet, dass das Programm erfolgreich war.
ein anderer Status als 0 bedeutet, dass das Programm aufgrund eines Fehlers oder einer Anomalie beendet wurde.
return n; von Ihrer Haupteingabefunktion beendet Ihren Prozess und meldet dem übergeordneten Prozess (dem Prozess, der Ihren Prozess ausgeführt hat) das Ergebnis Ihres Prozesses. 0 bedeutet ERFOLG. Andere Codes zeigen normalerweise einen Fehler und seine Bedeutung an.
Wie hier erklärt, machen im Kontext von main
sowohl return
als auch exit
dasselbe
F: Warum brauchen wir return
oder exit
?
A: Um den Ausführungsstatus anzuzeigen.
Selbst wenn Sie keine return- oder exit-Anweisungen hatten, würde der Code in Ihrem Beispiel einwandfrei laufen (vorausgesetzt, alles andere ist syntaktisch usw. korrekt. Wenn main
int
zurückgibt, benötigen Sie am Ende return 0
).
Nach der Ausführung haben Sie jedoch keine Möglichkeit herauszufinden, ob Ihr Code wie erwartet funktioniert hat. Sie können den Rückkehrcode des Programms verwenden (In * nix-Umgebungen mit $?
), der Ihnen den Code gibt (wie eingestellt) von exit
oder return
). Da Sie diese Codes selbst festlegen, verstehen Sie, an welchem Punkt der Code vor dem Beenden erreicht wurde.
Sie können return 123
schreiben, wobei 123
den Erfolg bei den Nachprüfungen angibt.
Normalerweise wird in * nix-Umgebungen 0
als Erfolg und Nicht-Null-Code als Fehler betrachtet.
return n
aus main
entspricht exit(n)
.
Die zurückgegebene Gültigkeit ist der Rest Ihres Programms. Die Bedeutung ist abhängig vom Betriebssystem. Unter Unix bedeutet 0 eine normale Beendigung, und eine Nicht-Null-Angabe bedeutet, dass das Programm aufgrund dieser Fehlerform abgebrochen wurde, ohne dass der beabsichtigte Zweck erreicht wurde.
Es ist ungewöhnlich, dass Ihr Beispiel 0 (normale Beendigung) zurückgibt, wenn es anscheinend nicht mehr genügend Arbeitsspeicher hat.