2013-06-29 28 views
12

Gibt es einen Unterschied zwischen return 0 und exit (0) wenn sie in einer Funktion? Wenn ja, wann sollte ich return 0 oder exit (0) in einer Funktion verwenden?Unterschied zwischen „return 0“ und „exit (0)“

+1

Ausfahrt 0? wahrscheinlich nicht kompilieren. exit (0) beendet Ihr Programm.Wahrscheinlich wollen Sie das nicht – FDinoff

+0

Entschuldigung dafür. Ich habe die Frage bearbeitet. – haccks

+0

Es gibt einen ähnlichen Beitrag hier http://stackoverflow.com/questions/1116493/how-to-quit-a-c-program – doctorlove

Antwort

17

return tritt aus der Funktion während exit Ausfahrten aus dem Programm.

In main Funktion Ausführung return 0; Anweisung oder Aufruf exit(0) Funktion die registrierten atexit Handler aufrufen und Programmabbruch führen.

+11

Die 'atexit'-Handler werden auch bei der Rückkehr von der Hauptstelle aufgerufen. –

+0

@CarlNorum danke für die Korrektur, ich habe meine Antwort aktualisiert. – ouah

6

Ja, es gibt, da gibt es keine Aussage exit genannt wird. Ich denke du meinst die Funktionexit?

In diesem Fall gibt es einen großen Unterschied: Die exit Funktion verlässt den Prozess, mit anderen Worten, das Programm wird beendet. Die returnAnweisung kehren einfach von der aktuellen Funktion zurück.

Sie sind nur ähnlich verwendet, wenn in der main Funktion.

8

exit 0 ist ein Syntaxfehler in C. Sie können exit(0) stattdessen einen Aufruf an eine Standardbibliotheksfunktion haben.

Die Funktion exit wird das gesamte Programm beenden, um das Betriebssystem die bereitgestellte Exit-Code zurück. Die return-Anweisung beendet stattdessen nur die aktuelle Funktion, die dem Aufrufer das angegebene Ergebnis gibt.

Sie sind die gleichen nur bei der Verwendung in main (weil das Beenden der main Funktion das Programm beendet).

Normalerweise wird 10 nur in Notfällen verwendet, in denen Sie das Programm beenden möchten, da es keine vernünftige Möglichkeit gibt, die Ausführung fortzusetzen. Zum Beispiel:

// 
// Ensure allocation of `size` bytes (will never return 
// a NULL pointer to the caller). 
// 
// Too good to be true? Here's the catch: in case of memory 
// exhaustion the function will not return **at all** :-) 
// 
void *safe_malloc(int size) { 
    void *p = malloc(size); 
    if (!p) { 
     fprintf(stderr, "Out of memory: quitting\n"); 
     exit(1); 
    } 
    return p; 
} 

In diesem Fall, wenn die Funktion a Anrufe b Funktion, ruft Funktion c die my_malloc fordert Sie das Programm auf der Stelle statt der Rückkehr in c einen Fehlercode (zB ein NULL Zeiger) beenden möchten wenn der Code nicht geschrieben wurde, um Zuordnungsfehler zu behandeln.

0
  • return ist eine Aussage, die Kontrolle zurück an die anruf Funktion zurückgibt.
  • exit ist ein Systemaufruf, der das d.h momentan ausgeführte Programm des aktuellen Prozess beendet.

In main() die return 0; und exit(0); führen die gleiche Sache.

HINWEIS: Sie müssen #include<stdlib.h> einschließen.

+3

* "Einige Compiler akzeptieren und kompilieren sogar den Code, selbst wenn Sie keine Rückgabe schreiben 0" * weil es Standard ist. – effeffe

+0

OK, danke! – 0decimal0

Verwandte Themen