Explizite Abbruch-Anweisung



  • exit() = böse



  • kenner der kenner schrieb:

    exit() = böse

    nein, die funktion böse() gibt es nicht.
    🙂



  • Er sprach ja auch von böse und nicht von böse()



  • also net, mit 27 jahren wirst du doch mal langsam die ernunft ergreifen sollen, deine trollereien ein ende zu bereiten. dicke eier oder was?



  • morgenlatte schrieb:

    Er sprach ja auch von böse und nicht von böse()

    aber mal im ernst: was soll an exit() denn böse sein?
    🙂



  • Natürlich nichts.



  • Nun ja, mit exit hab ichs probiert, aber das brachte nix. Evtl. weil ich keine Klammern gesetzt hab, aber nutzlos wars trotzdem. return(0) hat zum gewünschten Erfolg geführt. Doch ganz gut wenn man jemanden in den ICQ-Contacts hat, der sich damit auskennt 🙂
    Trotzdem danke für die Antworten



  • volvox2k1 schrieb:

    Nun ja, mit exit hab ichs probiert, aber das brachte nix. Evtl. weil ich keine Klammern gesetzt hab, aber nutzlos wars trotzdem.

    wenn du das programm sofort verlassen willst, ist exit() doch ideal. wo war das problem?

    volvox2k1 schrieb:

    return(0) hat zum gewünschten Erfolg geführt.

    dafür setzt du jetzt klammern, wo keine sein müssen.
    🙂



  • volvox2k1 schrieb:

    Nun ja, mit exit hab ichs probiert, aber das brachte nix. Evtl. weil ich keine Klammern gesetzt hab, aber nutzlos wars trotzdem. return(0) hat zum gewünschten Erfolg geführt. Doch ganz gut wenn man jemanden in den ICQ-Contacts hat, der sich damit auskennt 🙂
    Trotzdem danke für die Antworten

    du musst aber verstehen, was du da machst.

    Es gibt die Funktion man: exit(3posix) (in ANSI Standard definiert), mit der ein Programm sein Ablauf beendet. exit() ist nicht böse, wie böse Zungen vermuten 😉 das einzige Problem mit exit (wenn man C benutzt) ist, dass exit() geringe Aufräumarbeit erledigt (geöffnete Streams werden geflusht; die durch atexit/on_exit registrieren Funktionen werden aufgerufen) aber z.B. dynamisch angelegten Speicher wird nicht freigegeben. Außerdem legt exit() den Terminierungszustand des Prozess fest (==0 Succes, != 0 Fehler).

    return ist ein C Keyword, mit dem man sagt, dass die Funktion an dieser Stelle mit ihrer Ausführung enden soll und den Wert zurückgibt, der nach der Eingabe des return Keywords steht (außer bei void Funktionen).

    Wenn du return 0; in der main Funktion aufrufst, dann ist es äquivalent zu exit(0). Wenn du aber deinen Code außerhalb von der Main Funktion hast und dort return 0; machst statt exit(0) (du wolltest, dass das Programm sofort terminiert), dann wird sich das Programm ganz anders verhalten, als du erwartest, weil das Programm weiterläuft statt sofort zu beenden.



  • supertux schrieb:

    aber z.B. dynamisch angelegten Speicher wird nicht freigegeben.

    bei den ausgewachsenen betriebssystemen aber schon. jeder prozess hat seinen privaten heap und dessen speicherseiten wandern in den freien pool zurück, wenn der prozess (egal wie) beendet wird. wäre es nicht so, dann würde z.b. jedes abgestürzte programm memory-leaks hinterlassen.
    🙂



  • OS-freak schrieb:

    bei den ausgewachsenen betriebssystemen aber schon.

    sicher, aber kann man sicher sein, dass dies immer erfüllt ist? Was ist wenn ich etwas für einen Microcontroller schreibe, dessen OS das nicht tut? Am besten immer selber den Speicher freigeben.


Anmelden zum Antworten