Was ist der Unterschied zwischen exit(0) und exit(1) in C?

Lesezeit: 4 Minuten

Kann mir das jemand sagen? Was ist der Unterschied zwischen exit(0) und exit(1) in C-Sprache?

Benutzeravatar von Alok Save
Alok Speichern

Was ist der Unterschied zwischen exit(0) und exit(1) in C-Sprache?

exit(0) zeigt eine erfolgreiche Beendigung des Programms an und ist vollständig portierbar, While
exit(1) (normalerweise) zeigt eine erfolglose Beendigung an. Die Nutzung ist jedoch nicht portabel.

Beachten Sie, dass der C-Standard definiert EXIT_SUCCESS und EXIT_FAILURE um den Beendigungsstatus von einem C-Programm zurückzugeben.

0 und EXIT_SUCCESS sind die von der Norm vorgegebenen Werte jedoch nur zur Anzeige einer erfolgreichen Terminierung EXIT_FAILURE ist der Standardwert für die Rückgabe einer erfolglosen Beendigung. 1 wird jedoch in vielen Implementierungen für dasselbe verwendet.


Bezug:

C99-Standard: 7.20.4.3 Die exit Funktion
Abs. 5

Schließlich wird die Steuerung an die Hostumgebung zurückgegeben. Wenn der Statuswert Null ist oder
EXIT_SUCCESS, wird eine implementierungsdefinierte Form des Status erfolgreiche Beendigung zurückgegeben. Wenn der Statuswert ist EXIT_FAILURE , wird eine implementierungsdefinierte Form des Status erfolglose Beendigung zurückgegeben. Andernfalls ist der zurückgegebene Status implementierungsdefiniert.

  • Können Sie die Nichtübertragbarkeit erklären? Insbesondere geben Exit-Codes ungleich Null verschiedene Fehlermodi an. Es ist üblich, dass eine Anwendung dies verwendet, um weitere Informationen bereitzustellen. Eine einzelne Konstante (EXIT_FAILURE) ist daher unzureichend.

    – Konrad Rudolf

    30. März 2012 um 14:34 Uhr

  • @KonradRudolph: Ich habe das entsprechende Zitat hinzugefügt. Ich hoffe, das hilft.

    – Alok Speichern

    30. März 2012 um 14:38 Uhr

  • @Als: POSIX ist ein Standard. Der C-Standard könnte “implementierungsdefiniert” sagen, aber das ist nicht gleichbedeutend mit “nicht portierbar”, wenn es sich tatsächlich um Implementierungen handelt tun der Konvention zustimmen.

    – Katze Plus Plus

    30. März 2012 um 14:51 Uhr


  • @PeterM: Finden Sie eine Plattform, die diese Konvention nicht verwendet. Es handelt sich wahrscheinlich um eine spezialisierte / eingebettete / freistehende / was auch immer-Umgebung, in der die Portabilität von exit ist Ihre geringste Sorge (verdammt, es gibt vielleicht nicht einmal sein eine dort verfügbare C-Bibliothek. NICHTS IST TRAGBAR!!!111).

    – Katze Plus Plus

    30. März 2012 um 14:52 Uhr


  • @CatPlusPlus: Auf OpenVMS, Anruf exit mit jedem ungeraden Wert bedeutet Erfolg. exit(0) wird im Sinne der C-Konformität als Sonderfall behandelt. Ja, POSIX ist ein Standard, aber nicht alle Systeme entsprechen ihm. Wenn Sie Code schreiben möchten, der POSIX voraussetzt, können Sie das tun, aber es schränkt die Portabilität Ihres Codes ein.

    – Keith Thompson

    20. August 2013 um 0:46 Uhr

Benutzeravatar von Sam DeHaan
Sam DeHan

exit in der C-Sprache nimmt eine Ganzzahl an, die einen Exit-Status darstellt.

Erfolg beenden

Typischerweise wird ein Exit-Status von 0 als Erfolg oder als absichtliches Exit angesehen, das durch die erfolgreiche Ausführung des Programms verursacht wurde.

Exit-Fehler

Ein Beendigungsstatus von 1 wird als Fehler angesehen und bedeutet meistens, dass das Programm aus irgendeinem Grund beendet werden musste und nicht in der Lage war, alles im normalen Programmablauf erfolgreich abzuschließen.

Hier ist ein GNU-Ressource Apropos Exit-Status.


Wie @Als angegeben hat, sollten anstelle von 0 und 1 zwei Konstanten verwendet werden.

EXIT_SUCCESS wird von der Norm als Null definiert.

EXIT_FAILURE ist durch den Standard nicht darauf beschränkt, aber viele Systeme implementieren es als eins.

exit(0) zeigt an, dass das Programm ohne Fehler beendet wurde. exit(1) zeigt an, dass ein Fehler aufgetreten ist.

Sie können andere Werte als verwenden 1 um zwischen verschiedenen Arten von Fehlern zu unterscheiden.

Benutzeravatar von ouah
ouah

Die Differenz ist der Wert, der an die Umgebung zurückgegeben wird 0 im ersteren Fall und 1 im letzteren Fall:

$ ./prog_with_exit_0
$ echo $?
0
$

und

$ ./prog_with_exit_1
$ echo $?
1
$

Beachten Sie auch, dass der Makrowert EXIT_SUCCESS und EXIT_FAILURE als Argument verwendet exit Funktion sind implementierungsdefiniert, werden aber normalerweise entsprechend gesetzt 0 und eine Zahl ungleich Null. (POSIX erfordert EXIT_SUCCESS 0 sein). Also normalerweise exit(0) bedeutet Erfolg und exit(1) ein Fehler.

Ein exit Funktionsaufruf mit einem Argument in main Die Funktion ist äquivalent zur Anweisung return mit der gleichen Argumentation.

exit ist ein Systemaufruf, der verwendet wird, um einen laufenden Prozess zu beenden, von dem er aufgerufen wird. Der Parameter to exit wird verwendet, um den übergeordneten Prozess über den Status des untergeordneten Prozesses zu informieren. Daher kann exit(0) verwendet werden (und oft verwendet werden), um die erfolgreiche Ausführung eines Prozesses anzuzeigen, und exit(1), um einen Fehler zu kennzeichnen. Referenzlink

Benutzeravatar von Sandeep_black
Sandeep_schwarz

exit(0) ist äquivalent zu exit(EXIT_SUCCESS).

exit(1) ist äquivalent zu exit(EXIT_FAILURE).

Bei einem Fehler wird normalerweise ein positiver Wert zurückgegeben, um den Prozess zu beenden, den Sie auf der Shell mit $? finden können.

Wert über 128, der die Beendigung durch das Signal verursacht. Wenn also irgendein Shell-Befehl durch ein Signal beendet wird, muss der Rückgabestatus (128+Signalnummer) sein.

Zum Beispiel:

Wenn irgendein Shell-Befehl durch SIGINT beendet wird, dann $? ergibt 130 ( 128+2) (Hier ist 2 die Signalnummer für SIGINT, überprüfen Sie dies mit kill -l )

Benutzeravatar von Rashid Thattayil
Raschid Thattayil

exit function. In der Programmiersprache C ruft die exit-Funktion alle bei exit registrierten Funktionen auf und beendet das Programm.

exit(1) bedeutet Programm(Prozess) erfolglos beendet.
Dateipuffer werden geleert, Streams geschlossen und temporäre Dateien gelöscht

exit(0) bedeutet Programm(Prozess) erfolgreich beendet.

1421760cookie-checkWas ist der Unterschied zwischen exit(0) und exit(1) in C?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy