Allgemeines Programmieren[C++]: Wie gehe ich mit Fehlern um? Eigene Klasse?



  • Hi,

    ich programmiere schon etwas länger und frage mich nun, wie ich mit Fehlern umgehen soll. Ein Beispiel:

    Ich schreibe in C++ eine allgemeine Klasse für Socketfunktionen. Natürlich möchte ich sie allgemein gestalten, sodass ich sie in allen folgenden projekten immernoch verwenden kann.
    Was passiert aber nun, wenn diese Klasse einen Fehler hat, z.B. kein Socket vergeben werden kann?

    Ich könnte natürlich jedesmal im Hauptprogramm auswerten, was meine Methoden zurückliefern, finde dies persönlich aber sehr umständlich.
    Ich dachte eher an eine Art Fehlerklasse oder sowas, auf die alles zugreifen kann.

    Also zu meinen Fragen: Wie macht man sowas? Was macht der professionelle Programmierer mit Fehlern? Gibt es ein Tutorial dazu?

    Ich hoffe es ist klar geworden was ich meine. Mir geht es hier nicht um try/catch blöcke sondern darum, wo ich die Fehler danach hinschicke.



  • Der komfortabelste Weg, auf Fehler zu reagieren, sind Exceptions: sie räumen den Stack auf und können gefangen werden, wenn es sich anbietet. Wie der Name sagt, sind Exceptions aber für den Ausnahmefall gedacht, etwa, wenn ein wilder Zeiger dereferenziert wird, wenn ein gewöhnliches Programm nicht genug Speicher bekommen kann, wenn einer Funkion unzulässige Parameter übergeben werden, kurz, immer, wenn mit dem Fehler eigentlich nicht gerechnet wird.
    Für alltäglichere Fehler mag es dennoch sinnvoll sein, einen Rückgabewert auszuwerten, u.a., da hierdurch kein Exception-Overhead entsteht. So ist das ja in den Funktionen des Windows-API geregelt.

    Prinzipiell wertet Fehler nur aus, wer vernünftig darauf reagieren kann. Wenn ein Anwender deiner Socket-Klasse auf einen entsprechenden Fehler im Programmcode reagieren will, fängt er die Exception, ansonsten eben nicht. Auf der UI-Ebene sollte dann noch ein try-catch-Block sein, der alle Exceptions fängt, eine Fehlermeldung an den Benutzer ausgibt und, wenn es notwendig sein sollte, das Programm terminiert.


Anmelden zum Antworten