![]() |
![]() |
Ausnahmebehandlung (1) |
G.Eichelsdörfer
Staatliche Technikerschule Weilburg |
In der klassischen C-Programmierung werden zur Fehler- bzw. Ausnahmebehandlung Funktionen verwendet, die im Resultat oder in einem Parameter Informationen über eine aufgetretene Ausnahme liefern. Dies erfordert nach jedem Funktionsaufruf mit potentieller Fehlermöglichkeit eine Auswertung der Ausnahmeinformation.
Wünschenswert erscheint ein Konstrukt, durch welches eine gebündelte Folge von Anweisungen sukzessive ausgeführt wird und sobald darin an irgendeiner Stelle eine Ausnahme auftritt, diese Ausnahme angemessen behandelt wird.
Beispiel: z = Arc sin(1/x)
Zumindest in jedem der ersten drei Schritte kann es zu Fehlern bzw. Ausnahmen kommen (Eingabefehler, Division durch Null, Betrag des Arguments von Arc sin zu groß).
Klassische Implementation in C++:
Voraussetzung:
Die in der folgenden Sequenz aufgerufenen (fiktiven) Funktionen LiessFliesskommazahl()
und Keherwert() liefern einen Wahrheitswert. Wird false bzw. 0 geliefert, bedeutet dies,
dass ein Fehler festgestellt wurde. Zweckmäßgerweise wird die jeweils folgende Anweisung
nur dann ausgeführt, wenn kein Fehler festgestellt wurde.
In jedem Alternativzweig (else) wird eine geeignete Fehlerinformation über die
Standard-Fehlerausgabeobjekt cerr ausgegeben.
...
|
Verbesserte Möglichkeiten in C++
Zunächst müssen die aufgerufenen Funktionen eine aufgetretene Ausnahme wie eine Funktionsstörung auf einem gesonderten Weg melden können (vgl. Not-Aus Schalter). Dies erfordert ein gegenüber ANSI-C neues Sprachkonstrukt.
Sobald eine Ausnahme gemeldet wird, dürfen die in der Sequenz folgenden Anweisungen nicht mehr ausgeführt werden. Statt dessen ist diese Ausnahme wie eine Störung zu behandeln.
Zum obigen Beispiel:
Wenn für x eine Null eingegeben wurde (1.), tritt bei der Berechnung des Kehrwertes (2.) eine Ausnahme auf - Division durch Null. Dann ist es völlig sinnlos, den Arc sin (3.) berechnen zu lassen. Genauso wenig macht es Sinn, den Inhalt von z ausgeben zu lassen (4.).
In C++ Syntax sieht dies folgendermaßen aus:
...
|
try
und catch
sind die für die Ausnahmebehandlung
erforderlichen Schlüsselwörter in C++. Die geschweiften Klammern dahinter sind zwingend
erforderlich, auch bei einer Einzelanweisung.