Exit/Return

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Exit/Return
Hab da ein kleines Probelm:Und zwar wenn ich mir Programme von unterschiedlichen Leuten anschau dann beenden die Nach einem Fehler mit verschieden “Methoden”.
Beispiel:

[code]if (destsock == -1)
{
perror(“Cannot create destination socket”);
return 0;
}

[/code]

ein anderer:

[code]if ((listen_socket = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
printf(“fatal error creating socket\n”);
exit(-1);
}

[/code]

Manche benutzen return , manche exit .
Und die Parameter sind auch noch unterschiedlich:
return 0
exit (-1)
exit (0)
exit (EXIT_FAILURE)

Wieso sind da so Unterschiede?Oder gibts bestimmte Regeln wann ich mit welchem Parameter beende? :-/


Hi,

erstmal return springt nur aus der aktuellen Funktion zurück, wenn das die main Funktion ist wird dein Programm dadurch beendet. Exit beendet das Programm immer.
Für die Rückgabewerte solltest Du die Makros EXIT_SUCCESS und EXIT_FAILURE benutzen. Ich denke die sind selbsterklärend. 0 steht aber in der Regel für eine erfolgreiche Ausführung, also wohl nicht so geeignet…
return 0 steht typischerweise in der main funktion bei erfolgreichem ende, also zB ganz am Ende… exit(-1) dürfte das gleiche sein wie exit(EXIT_FAILURE) wobei letzteres zu bevorzugen ist


Moin!

Beim 2. Beispiel musst du aber fprintf(stderr, “fatal…\n”) nehmen, da sonst die Ausgabe gepuffert wird und nicht auf dem Error-Kanal ausgegeben wird, soweit ich das beurteilen kann.

Da WELL '4


ja fehlermeldungen sollten grundsätzlich auf stderr ausgegeben werden…


Also bei den ganzen Abfragen wenn man Socket-Verbindung(socket, bind accept…) erstellt am besten abfangen mit :

if (...== -1) { fprintf (stderr, "Fehler...\n!"); exit(EXIT_FAILURE);

Und bei den anderen Fehlermeldungen auch(fprintf)!?Kann man das so pauschal sagen? 8-(


jeop oder noch schöner perror oder strerror benutzen, die werten auch noch errno aus.