C++ - Einführung und professionelle Programmierung
von: Ulrich Breymann
Carl Hanser Fachbuchverlag, 2005
ISBN: 9783446404175
Sprache: Deutsch
753 Seiten, Download: 7461 KB
Format: PDF, auch als Online-Lesen
10.1 Ausnahmebehandlung (S. 353-354)
Die vierte Fehlerbehandlungsstrategie von Seite 352 hat den Vorteil, dass der Programmcode, der die eigentliche Aufgabe erledigen soll, von vielen eingestreuten Fehlerprüfungen entlastet wird. C++ bietet die Ausnahmebehandlung (englisch exception handling) an, die ebenfalls den Fehlerbehandlungscode vom »normalen« Programm sauber trennt und die eine spezielle Abfrage von Fehlerparametern an vielen Stellen im Programm überflüssig macht. Zu unterscheiden ist zwischen der Erkennung von Fehlern wie zum Beispiel
– Division durch Null,
– Bereichsüberschreitung eines Arrays,
– Syntaxfehler bei Eingaben,
– Zugriff auf eine nichtgeöffnete Datei,
– Fehlschlag der Speicherbeschaffung oder
– Nichteinhaltung der Vorbedingung einer Methode
und der Behandlung von Fehlern. Die Erkennung ist in der Regel einfach, die Behandlung schwierig und häufig genug unmöglich, sodass ein Programm gegebenenfalls abgebrochen werden muss. Außer den vorhersehbaren Fehlern gibt es natürlich noch andere! Die Fehlerbehandlung sollte einen von zwei Wegen einschlagen:
• Den Fehler beheben und den Programmlauf fortsetzen oder, falls das nicht gelingt, das Programm mit einer aussagefähigen Meldung abbrechen oder
• den Fehler an das aufrufende Programm melden, das ihn dann ebenfalls auf eine dieser beiden Arten bearbeiten muss.
Für den Fall, dass Fehler in einer Funktion vom Aufrufer behandelt werden können, stellt C++ alternativ zur vierten Strategie auf Seite 352 die Ausnahmebehandlung zur Verfügung. Der Ablauf lässt sich wie folgt skizzieren:
1. Eine Funktion versucht (englisch try) die Erledigung einer Aufgabe.
2. Wenn sie einen Fehler feststellt, den sie nicht beheben kann, wirft (englisch throw) sie eine Ausnahme (englisch exception) aus.
3. Die Ausnahme wird von einer Fehlerbehandlungsroutine aufgefangen (englisch catch), die den Fehler bearbeitet.
try und catch
Die Funktion kann der Fehlerbehandlungsroutine ein Objekt eines beliebigen Datentyps »zuwerfen«, um Informationen zu übergeben. Im Unterschied zu der oben erwähnten vierten Strategie wird nach der Fehlerbehandlung nicht in die Funktion zurückgesprungen. Das Programm wird vielmehr mit dem der Fehlerbehandlung folgenden Code fortgesetzt. Wenn aus einem Block herausgesprungen wird, werden die Destruktoren aller in diesem Block definierten automatischen Objekte aufgerufen. Das folgende Schema zeigt die syntaktische Struktur.