19.2 Fehlerbehandlung

Beim Abarbeiten der Standardfunktionen können natürlich viele Fehler auftreten. Das Verhalten der Funktionen bei etlichen Fehlermöglichkeiten ist im Standard festgelegt. Einige Funktionen signalisieren durch ihren Rückgabewert, daß sie ihren Auftrag nicht ausführen können (beispielsweise liefert malloc() den Wert NULL, wenn nicht mehr genügend freier Speicher vorhanden ist). Andere Funktionen setzen eine globale Variable errno36, wenn ein Fehler auftritt. Am Wert von errno kann man dann die Art des Fehlers erkennen.

Beim Programmstart ist errno immer auf 0 gesetzt. Bibliotheksfunktionen setzen den Wert im Fehlerfall; aber nie mehr auf 0. Dadurch muß der Programmierer nicht bei jeder eventuell fehlerhaften Operation errno kontrollieren, sondern kann mehrere Funktionen aufrufen und erst dann errno prüfen, wenn er es für richtig hält.

Der Programmierer darf mit errno = 0 den Fehlerindikator löschen.

Die standardisierten Werte von errno sind:

0
solange kein Fehler auftrat.
EDOM
besagt, daß eine aufgerufene Funktion (aus math.h) für das aktuelle Argument mathematisch nicht definiert ist, z.B. asin(2.0). Der Rückgabewert der Funktion ist dann 0.0.
ERANGE
tritt auf, wenn das Ergebnis einer Funktion den darstellbaren Zahlenbereich überschreitet (z.B. pow() mit großen Argumenten). Dann wird von der Funktion HUGE_VAL oder -HUGE_VAL zurückgegeben, je nach dem Vorzeichen des (nicht berechenbaren) Ergebnisses.

Andere Fehler werden nicht gemeldet. Beispielsweise darf das Argument einer periodischen Funktion nicht zu groß werden, da sonst durch die begrenzte Stellenzahl der Mantisse die Auflösung innerhalb einer Periode der Funktion nicht mehr reicht. Solche Fehler werden von den Funktionen der Standardbibliothek nicht gemeldet.

Schutz vor Feldgrenzenüberschreitungen (einschließlich Kontrolle von Stringlängen) findet zur Laufzeit nicht statt.

EDOM und ERANGE sind in math.h definiert.

Die Umwandlung von errno-Werten in Text kann man mit den Funktionen perror() bzw. strerror() erreichen.

Dateien:

Jede geöffnete Datei hat einen sogenannten Fehlerindikator, der beim Auftreten von Fehlern gesetzt wird. Mit ferror() kann man diesen Indikator abfragen.

Beim Öffnen der Datei, beim Zurückspulen auf den Anfang mit rewind() oder beim Aufruf von clearerr() wird der Indikator gelöscht.

Dateifunktionen, die den Typ int als Rückgabewert haben, liefern im Fehlerfall den vordefinierten Wert EOF (definiert in stdio.h).

AnyWare@Wachtler.de