exit und return



  • Fellhuhn schrieb:

    return ist nur für Funktionen/Methoden, nicht für das eigentliche Programm.

    Der saubere Weg ein Programm zu verlassen ist es aus main zu beenden, entweder implizit oder durch das explizite return mit Code.

    exit hat den häßlichen Seiteneffekt, daß die Destruktoren von statischen Objekten nicht aufgerufen werden. Wenn man irgend welche Singletons ö.ä. hat, kann das problematisch sein.



  • ~john schrieb:

    Fellhuhn schrieb:

    return ist nur für Funktionen/Methoden, nicht für das eigentliche Programm.

    Der saubere Weg ein Programm zu verlassen ist es aus main zu beenden, entweder implizit oder durch das explizite return mit Code.

    exit hat den häßlichen Seiteneffekt, daß die Destruktoren von statischen Objekten nicht aufgerufen werden. Wenn man irgend welche Singletons ö.ä. hat, kann das problematisch sein.

    Habe ich was anderes behauptet?



  • Fellhuhn schrieb:

    ~john schrieb:

    Fellhuhn schrieb:

    return ist nur für Funktionen/Methoden, nicht für das eigentliche Programm.

    Der saubere Weg ein Programm zu verlassen ist es aus main zu beenden, entweder implizit oder durch das explizite return mit Code.

    exit hat den häßlichen Seiteneffekt, daß die Destruktoren von statischen Objekten nicht aufgerufen werden. Wenn man irgend welche Singletons ö.ä. hat, kann das problematisch sein.

    Habe ich was anderes behauptet?

    Naja, es hatte sich schon so angehört als würdest du exit für das Beenden in betracht ziehen.

    Un der Unterschied zwischen exit und return ist etwa so, als wenn man in ein Hochhaus mehrere Treppen und Türen hinter sich gebracht hat, und sich dann überlegt wie man wieder das Haus verlässt:
    return: Man geht wieder durch die Türen und Treppen zurück und verlässt damit das Hochhaus.
    exit: Man nimmt das nächstbeste Fenster.

    Ja, es kann gut gehen. Aber mit Sicherheit nicht immer ;p

    cu André



  • Eben, wenn du du mit "return" die letzte Treppe nimmst, bist du da wo du auch durchs "exit" im 20. Stock angekommen wärst. Allerdings in einem etwas unschöneren Zustand.

    exit braucht man eigentlich nicht, Exceptions können das ebenso, und dazu sauber, regeln.

    Wobei mir bei den Exceptions bei C++ immernoch das finally fehlt...



  • Fellhuhn schrieb:

    Wobei mir bei den Exceptions bei C++ immernoch das finally fehlt...

    Wobei du die meisten derartigen Situationen durch RAII lösen kannst - am Funktionanfang legst du ein Objekt an und im Destuktor führt es alle notwendigen Aufräumarbeiten auf (und der wird sowohl im Regelfall als auch beim Stack Unwinding ausgeführt).



  • Wirkt unsauber aber sicher eine bessere Möglichkeit als den CleanUp-Code mehrfach aufzuführen.



  • Fellhuhn schrieb:

    Wirkt unsauber aber sicher eine bessere Möglichkeit als den CleanUp-Code mehrfach aufzuführen.

    finally wälzt die Veranwortung wieder auf den Nutzer der Klasse und nicht auf den Designer einer Klasse ab. Die Realität zeigt, daß der Nutzer sich mit den Problemen nicht herumschlagen will. Insofern ist finally schlechter als RAII.



  • ~john schrieb:

    finally wälzt die Veranwortung wieder auf den Nutzer der Klasse und nicht auf den Designer einer Klasse ab. Die Realität zeigt, daß der Nutzer sich mit den Problemen nicht herumschlagen will. Insofern ist finally schlechter als RAII.

    Weshalb ich auch der Meinung bin C++ braucht kein finally. Das verleitet nur zu unsauberer Programmierung 😉



  • ~john schrieb:

    exit hat den häßlichen Seiteneffekt, daß die Destruktoren von statischen Objekten nicht aufgerufen werden. Wenn man irgend welche Singletons ö.ä. hat, kann das problematisch sein.

    du verwechselst das verhalten mit abort.
    exit ruft die destruktoren von statischen objekten sehr wohl auf.
    nur automatische objekte müssen nicht unbedingt alle zerstört werden.

    btw. um sicher zu gehen, dass das passiert, empfiehlt der standard das werfen einer ausnahme, die in main gefangen wird. dort kann man ja dann auch exit aufrufen, wenn man lust hat (🙄 )



  • LordJaxom schrieb:

    ~john schrieb:

    finally wälzt die Veranwortung wieder auf den Nutzer der Klasse und nicht auf den Designer einer Klasse ab. Die Realität zeigt, daß der Nutzer sich mit den Problemen nicht herumschlagen will. Insofern ist finally schlechter als RAII.

    Weshalb ich auch der Meinung bin C++ braucht kein finally. Das verleitet nur zu unsauberer Programmierung 😉

    Um nicht nochmal dasselbe zu schreiben: 100% 👍

    Gruß,

    Simon2.



  • queer_boy schrieb:

    du verwechselst das verhalten mit abort.

    Mag sein, jedenfalls bleibt bei exit ein anderer Pferdefuß im Spiel, das Stack unwinding wird nicht gemacht. Ergo, läßt man von exit lieber die Finger. Es kann nichts, was return aus main nicht auch könnte. abort kann ja zu Debugging Zwecken ganz brauchbar sein.


Anmelden zum Antworten