Fehler- und Textausgabe in Bibliotheken
-
Hallo!
Also ich habe es jetzt erfolgreich hinbekommen, mein kleines Konsolen-Programm, das eigentlich eher einer Bibliothek mit zugehörigem Interface ähnelt, zu Splitten in Bibliothek und Programm, dass das Interface stellt und die Bibliothek verwendet. Soweit so gut, jetzt ist nur meine Frage: Wie realisiert man in einer Bibliothek am besten die Text- und Fehlerausgabe? Da meine Bibliothek ein auf einen bestimmten anforderungsbereich bezogener Wrapper für einige MySql-Funktionen ist, gibt es natürlich viele Fälle, wo zum Beispiel fehler ausgegeben werden müssen. Sollte man das nachwievor über std::cout machen oder wie geht das am besten?
Vielen Dank im Voraus!
-
Alle Funktionen sollten irgendwie mitteilen können, ob ein Fehler stattgefunden hat. Dann sollte es möglich sein, eine Fehler-Struktur abzurufen, die den stattgefundenen Fehler enthält (Fehlermeldung + Fehlercode). Eventuell können die Funktionen auch sofort die Struktur zurückgeben (Rückgabewert oder Zeiger).
std::cout ist ein absolutes Tabu für Bibliotheken (und ist nichtmal für normale Programme für Fehlerausgaben geeignet).
-
Fehler sollten grundsätzlich an die aufrufende Funktion übergeben werden. Der Aufrufer hat dann zu entscheiden was damit geschieht.
Bei einer Bibliothek musst du dann entscheiden ob du die Fehler als Exceptions wirfst oder an den Bibliothekgrenzen umwandelst und Fehlercodes zurückgibst. Bei Exceptions muss jeder Entwickler die Bibliothek selber mitcompilieren, da Exceptions auf verschiedenen Plattformen nicht binärkompatibel sind, d.h. eine mit Compiler A compilierte exception aus der Bibliothek kann nicht von Compiler B im Programm gefangen werden, das die Bibliothek aufruft.
-
Für Fehlerbehandlungen sind Exceptions da.
Eine Bibliotheksfunktion spezifiziert, dass sie bei Fehlverhalten xyz eine Exception xyz wirft. Wie der Aufrufende damit umgeht ist ihm überlassen. Er kann z.B. per what() Methode die Fehlernachricht auf cout ausgeben oder was ganz anderes damit anstellen. Oder er macht nix und lässt das Programm gepflegt terminieren, was immer noch besser ist als irgendwelche Fehlercodes zu ignorieren.
-
Mefisto schrieb:
Sollte man das nachwievor über std::cout machen oder wie geht das am besten?
Bloß nicht! Wenn überhaupt dann cerr, aber auch dies besser nicht.
Wirf eine Excpetion oder gib einen Fehlercode zurück. Bonuspunkte wenn man aussuchen kann, welches von beiden.
edit: Ich bin einfach zu langsam...
