webentwicklung-frage-antwort-db.com.de

differenz zwischen Return 1, Return und Return -1 und Exit?

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 . 

19
LearNer

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.

23
Paolo

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.

1
giorashc

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.

0
EmptyData

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.

0
Sunil Yadav

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 mainint 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.

0

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.

0
Søren Debois