Exceptions Ja/Nein?

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Exceptions Ja/Nein?

Beitrag von Nvidia »

Hallo,
sind Exception sinnvoll oder nicht?
http://www.parashift.com/c++-faq-lite/exceptions.html
Die Seite zeigt, dass Code viel einfacher wird, statt if/else abfragen durch den Rückgabewert der Funktion.
Aber:
http://google-styleguide.googlecode.com ... Exceptions
Google rät von Exceptions ab. Was benutzen die dann? Machen die das dann über if/else abfragen?
Was würdet ihr raten?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Exceptions Ja/Nein?

Beitrag von franzf »

Exceptions zeigen defintive Ausnahmen und zwingen den User, sich damit zu beschäftigen. Wenn das Programm einen Zustand erreicht, der fehlerhaft ist, sollte das auch definitiv angezeigt werden.
Das Problem an dem "if/else" ist, dass sich viele darum kümmern müssen (uns wenn sie es nicht tun, weil sie faul sind, ziemliche Probleme bekommen können). Das Beispiel aus dem Guide "f() calls g() calls h()" und h signalisiert per return einen Fehler. Dann muss g() mit if den Fehler abfangen, einen passenden return liefern, den f() abfängt, zurück gibt und du als caller von f() auswerten darfst. Was passiert dann, wenn f() eigentlich einen std:.string zurückgeben soll? Error-Parameter als Zeiger der Funktion übergeben? (std::string f(in* err=0)) Das wird auf Dauer recht unbequem und die Leute fragen auch keinen error-Code mehr ab :P
Die ganzen Abfragen über alle Aufrufer erzeugt einen ziemlichen Bloat, der im Normalfall immer abgefragt werden muss. Exceptions hingegen tauchen nur im Ausnahmefall auf und erzeugen zur Laufzeit im Nicht-Ausnahmefall keinen Bloat.

Warum sich aber Google gegen Exceptions entschieden hat:
Given that Google's existing code is not exception-tolerant, the costs of using exceptions are somewhat greater than the costs in a new project. The conversion process would be slow and error-prone. We don't believe that the available alternatives to exceptions, such as error codes and assertions, introduce a significant burden.
Hätten sie doch nur vorher ihren Herb Sutter gelesen, und ihre Projekte Exception-safe entworfen ;) (Evtl. auftretende Exceptions führen nicht zu einem inkonsistenten Zustand des Programms.)
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Re: Exceptions Ja/Nein?

Beitrag von Nvidia »

Ok, also heißt das dann,
für Fehler die der User sehen muss, benutzt man Exceptions
und für Fehler, die auftreten, aber dann vom Programm selbst gehandhabt werden, benutzt man Rückgabewerte und fragt die mit if/else ab.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Exceptions Ja/Nein?

Beitrag von franzf »

;)
"User" == "Benutzer der Bibliothek" also Programmierer.
Exceptions für Zustände, die nicht eintreten dürfen. Teilen durch 0. Kein Speicher mehr verfügbar. Zugriff außerhalb der Grenzen. usw.
Was mit Exceptions nicht gehandhabt werden sollte sind "normale" Fehler. Der User gibt etwas falsches ein. Der Webserver ist nicht erreichbar. Bayern ist nicht Deutscher Meister. etc.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: Exceptions Ja/Nein?

Beitrag von solarix »

Bei meinen Projekten: nein (um die Eingangsfrage zu beantworten).
Bei den Gründen bin ich nicht besonders fantasievoll: die pros und contras werden seit Jahren im Netz abgewogen und können mit Google auch gefunden werden. Meine Gründe sind so in etwa:

1. In C++ können Exceptions nicht überall eingesetzt werden (z.B. CTors)
2. Mit Exceptions können in C++ nicht alle Fälle abgefangen werden (SEGFAULTS usw.)
3. Wegen 1+2 können Exceptions daher höchstens "Teillösungen" für ein Projekt sein
4. Es bläht IMHO den Code auf
5. Die Komplexität wird eher grösser (mehrere Austritt-Varianten in einer Methode... wer behandelt die Exception..)
6. Mit "defensiver Programmierung" und einer Null-Toleranz gegenüber Softwarefehler (z.B. ungültige Array-Indexe) mit Assertions mache ich die beste Erfahrung
7. Nicht alle Compiler kommen mit Exceptions klar oder erzeugen fehlerhaften Code..
8. Ohne Exceptions fügt sich der Code "homogener" in die Qt-Umgebung ein (Qt-API verwendet ebenfalls keine Exceptions)
9. Exceptions passen nicht recht zum Signal/Slot-Konzept (wie soll eine Exceptions in einem Slot abgefangen werden? Was soll der Eventloop oder der Emitter des Signals damit anfangen?)
10. Bei "echten" Ausnahmen (wie z.B. wenn der Speicher ausgeht) kann die Software eh nicht mehr gerettet werden. Da setze ich lieber gleich ein Assert..
..

Auf eine Debatte lasse ich mich aber nicht ein... Befürworter können mindestens 10 Gründe dafür zusammentragen.. und auch die haben recht :wink:

hth!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Exceptions Ja/Nein?

Beitrag von franzf »

Genau, im Prinzip muss jeder für sich selbst entscheiden, ob er sich exceptions antut oder nicht.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Exceptions Ja/Nein?

Beitrag von RHBaum »

Man kann aber auch nicht alle exceptions verhindern.
Nen bad alloc wird man effektiv nicht umgehen koennen.

Als Resultat werfe ich auch Exceptions, aber an Stellen, wo ich denke das das Program eh scho in nem desolaten Zustand ist, und nicht mehr gefangen werden kann.
Ich erwarte also nicht, das meine Exceptions gefangen werden, sondern dass die eher zum abort() durchgehen.

Ciao ...
Antworten