Next: Mechanismen für Ausnahmenbehandlungen
Up: Ausnahmenbehandlungen
Previous: Einführung
Es gibt sehr unterschiedliche Techniken zur Unterstützung von
Ausnahmenbehandlungen.
In Sprachen, die Ausnahmenbehandlungen nicht durch besondere
Sprachkonstrukte unterstützen, wird typischerweise eine Technik
verwendet, die auf besondere Rückgabewerte oder Statusvariablen beruht.
Als Beispiel dafür kann die C-Bibliothek verwendet werden:
/* Fehlerbehandlung in C */
if (write(fd, buf, nbytes) < 0)
/* Ausfall von write() -- errno enthaelt die Fehlernummer */
else
/* write() hat geklappt */
Hier liefert write entweder eine positive Anzahl zurück,
die für die Anzahl der gelesenen Bytes steht, oder -1,
das eine Fehlerindikation darstellt.
In der globalen Variablen errno ist dann die zugehörige
Fehlernummer zu finden.
Obwohl es naturgemäß erscheint, Untersuchungen auf mögliche
Ausnahmesituationen direkt hinter einem Prozeduraufruf vorzunehmen,
gibt es bei dieser Technik einige Probleme:
- Wie kann die Fehlerindikation sinnvoll weitergegeben werden,
wenn die Prozedur, die write aufgerufen hat, aufgeben möchte?
Da es möglicherweise auch andere Fehlervarianten gibt
(z.B. Parameter, die der Vorbedingung nicht genügen), reicht es
nicht, errno zurückzuliefern.
Ferner wäre möglicherweise für die aufrufende Partei auch
der exakte Kontext des Ausfalls von Interesse, wie z.B. die
Parameter von write.
- Der Programmtext droht umständlich zu werden,
wenn zahlreiche Aufrufe, die von einem möglichen Ausfall betroffen
sein können, hintereinander aufgeführt sind.
- Die Ausnahmenbehandlung hängt nicht vom jeweiligen Kontext ab
(z.B. von dem Objekt, auf dem eine Prozedur operiert).
Manchmal ist es angemessen (z.B. für Fehleruntersuchungen),
den Klienten sofort zu unterrichten, selbst wenn es alternative
Versuchsmöglichkeiten gibt.
- Der Fehlerindikationstest könnte vergessen werden.
Selbst bei Rückgabewerten ist
dies in C ohne Fehlermeldung möglich,
und im Falle von globalen Statusvariablen (z.B. InOut.Done
in Modula-2) fällt dies aus dem Rahmen der überprüfbaren
Möglichkeiten des Übersetzers.
Darüber hinaus werden globale Variablen durch parallele
Kontrollflüsse bedroht.
Next: Mechanismen für Ausnahmenbehandlungen
Up: Ausnahmenbehandlungen
Previous: Einführung
Andreas Borchert
2/2/1998