Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

idontknow

unregistriert

1

08.11.2009, 22:08

Fehler: try;catch/assert

moin!!

Hab in nem Buch diese 3 Begriffe für die Fehlerausgabe "entdeckt" und wollte mal wissen was ihr von try und catch zur Fehlerausgabe haltet!!

Und natürlich was ihr von dem assert makkro haltet. Im Buch stand, dass es im Release Modus einfach wegkompiliert wurde, was n atürlich ein Nachteil ist, da so keine Funktionen angegeben werden können.
Daher halte ich das Makro für unnötig und nicht so gut. Möchte dazu aber noch andere Meinungen hören!

Das Try & Catch scheint mir aber eine ganz nette Sache zu sein :)

mfg

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

08.11.2009, 22:22

Ich halte das mit try/catch so, dass ich eigentlich ein try in der main habe und dann das dazugehörige catch, wo ich dann den Fehler ausgebe.

Wenn ich etwas auf einer tieferen Stufe behandeln kann, dann wird das natürlich vorher gefangen, aber das ist eher selten.

Das assert Makro ist nicht für Fehlerbehandlung beim User gedacht, sondern für den Entwickler. Darum wird das im Release alles wegoptimiert. Assertions sind dazu gedacht, dass man sie an den Anfang von funktionen hat und den Input prüft. Dann werden z.B mit Unittests die Funktionen getestet und wenn es ein Problem gibt, schläft das assert an und gibt einem den Hinweis wo ein Fehler passiert ist. Wenn also die Tests in Ordnung verlaufen, dann ist es ein Problem des Testings, wenn ein Fehler trotzdem noch auftaucht.

3

09.11.2009, 00:02

Exceptionbehandlung (try&catch) kostet grundsätzlich mehr, als Fehler per return Wert zurück zu geben. Wenn man also Exceptions benutzt, sollte man das im Hinterkopf haben, relevant ist das meiner Meinung nach aber nur an Stellen die wirklich enorm schnell sein müssen und sehr oft benutzt werden.
Ich benutze boost::exception, damit kann man sehr einfach die Fehlerbeschreibung über mehrere Ebene verfeinern (Fehler wird in der LoadTexture Methode geworfen, die kann aber nicht wissen, welches Material von welchem Modell das jetzt betrifft), so kann man damit wirklich gute Fehlermeldungen bekommen.

Bei Exceptions muss man natürlich immer darauf achten, dass der Code Exceptionsafe ist, also z.B. smartpointer benutzen. Und daran denken, dass Exceptions Ausnahmen sein sollten, und sie daher auch nur für Fehler und so benutzen und nicht um irgendwelche Sachen standardmäßig zurück zu geben.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige