Fehler ausgeben
-
Hi zusammen und nochmal etwas...
Wie gebt ihr Fehlermeldungen aus? Also wenn ihr etwa einen Zugriff überprüft ob dieser gültig ist. Angenommen er ist nicht gültig.
Ich kenne dies alles nur in Java, wie aber kann ich in C++ einen Fehler ausgeben?
-
Deine Beschreibung ist etwas vage, deshalb weiss ich nicht genau, worauf du hinauswillst.
In C++ können durch das statische Typsystem viele Fehler bereits zur Compilezeit behandelt werden. Diese hindern das Programm am Kompilieren.
Wenn es darum geht, Laufzeitfehler zu behandeln, sind Exceptions ein verbreitetes Mittel in C++. Zugriff auf nicht existente Elemente eines Containers ist so ein Beispiel.
Falls du nur die Ausgabe meinst, kannst du
std::cout,std::cerrundstd::clog(die letzten beiden sind ungepufferte Streams) benutzen, um entweder auf der Konsole oder in Log-Dateien Fehler auszugeben.
-
Ja super genau das meine ich,
also damit ich beim programmieren gleich sehe wo der Fehler auftritt!
Vielen Dank!
-
redbomber schrieb:
Ja super genau das meine ich
Was meintest du nun genau?

-
Naja,
also ich habe bisher die Fehler immer mit cout ausgegeben.
Ist dann aber in der Console schlecht zu erkennen.Wenn ich jetzt aber std::cerr verwende, dann ist die Ausgabe in der Console immerhin besser zu erkennen.
Ich werde abgefangene Fehler also auf diese Weise auskommentieren.Meine Frage kommt daher, da ich etwa auf einen Array von einem Objekt zugreifen möchte.
Damit ich nicht auf einen zu großen Index zugreife den es in dem Array nicht mehr gibt überprüfe ich den Index vor dem Zugriff auf den Array und geben daraufhin mit std::cerr eine Meldung aus.
Ist das auf lange sicht sinnvoll, also kann ich diese Vorgehensweise auch weiterhin anwenden?
-
redbomber schrieb:
Ist das auf lange sicht sinnvoll, also kann ich diese Vorgehensweise auch weiterhin anwenden?
Das entspricht gerade dem Beispiel, das ich für Exceptions angebracht habe.

Langfristig würde ich so etwas unbedingt mit Exceptions lösen. Diese haben den Vorteil, dass sie den aktuellen Stapelrahmen so lange durchbrechen, bis sie gefangen werden. Falls sie nicht gefangen werden, beenden sie das Programm (im Debug-Modus kommt eine Debuggermeldung).
Das Problem bei
std::cerrist, dass man keine Chance hat, vom Programm aus zu überprüfen, ob nun ein Zugriff erfolgreich war oder nicht (das auf der Konsole Ausgegebene kann eigentlich nicht mehr gelesen werden). Bei einer Exception hingegen kann man auch spezifisch darauf reagieren, indem man einfach etwas Sinnvolles in einencatch-Block schreibt. Man hat immer noch die Möglichkeit, eine Fehlerausgabe durchzuführen, aber lässt sich gleichzeitig andere Möglichkeiten zu reagieren offen.
-
Alles klar,
jetzt hab ichs

Danke nochmal!
-
Kein Problem.

Vielleicht kannst du hier nachschauen, da werden Exceptions ziemlich gut erklärt (englisch). Die Seite solltest du dir sowieso merken; du kannst dort zu sehr vielen Klassen und Funktionen der Standardbibliothek nachschlagen.