Exceptions vs. Eigenes Errorcode -system



  • hallo

    kann mir jemand erklären welche vorteile exceptions gegenüber einer ganz normalen errorcode-fehlerbehandlung bringen?

    normalerweise geht man so vor um fehler zu bearbeiten.

    HRESULT MyFunc(void)
    {
      HRESULT Result=0;
      HRESULT Error1;
    
      dosomething;
    
      Error1=DoSomethingCritical();
      if (Error1!=0)
      {
        Result=17; //17 ist der fehlercode
      }
      else
      {
        ...
      }
    
      return Result;
    };
    

    das pflanzt sich dann immer weiter so von funktion zu funktion bis ganz nach unten. so werden in fast allen winapi- und directxapi-funktionen fehler übergeben, was ja auch ganz gut funktioniert. warum sollte ich nun meine eigenen funktionen mit exceptions programmieren, wenn ich das mit den errorcodes genauso machen kann, was, zumindest für mich, einfacher ist.



  • weils mit exceptions klarer wird

    du kannst lokal den fehler nicht behandeln, also sagst du einfach: fehler! und kümmerst dich um nichts mehr.

    Alle ressourcen werden dann freigegeben

    void MyFunc(void)
    {
      dosomething;
      DoSomethingCritical();
    };
    

    und schon ists viel kürzer und klarer.
    denn doSomeThingCritical wirft bei einem Fehler eine exception

    du musst dich um nix weiter kümmern.
    mir gefällt das besser (vorallem weil die funktion jetzt wesentlich kürzer ist)



  • Hallo,
    ein Ziel des Exceptionssystems ist es, Ausnahmebehandlung von normalem Kontrollfluss zu trennen. Dadurch soll Code klarer und leichter verständlich werden. Besonders deutlich wird dies in dem von Shade angesprochenen Fall wo eine Ausnahme nicht direkt dort behandelt werden kann, wo sie auftritt.

    Ein zweiter wichtiger Punkt von Exceptions ist, dass solche nicht ignoriert werden können. Rückgabewerte muss man nicht prüfen. Exceptions verschwinden niemals einfach so. Wer sie nicht fängt, bekommt irgendwann das System um die Ohren gehauen.

    Das schöne an Exceptions ist aber, dass man trotzdem immer noch ganz leicht Spaghetti-Code schreiben kann. Wenn man will kann man sogar setjmp/longjmp blass aussehen lassen 😃


Anmelden zum Antworten