Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Adalhard Schiebel Geändert vor über 11 Jahren
1
C Tutorium – Fehlerbehandlung – Knut Stolze
2
2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann Fehler produzieren (Ausnahmen bestätigen die Regel!)
3
3 Fehler von Systemfunktionen Alle Systemfunktionen geben Fehlerinformationen zurück – strchr – NULL Zeiger – fopen – NULL Zeiger – strtol – 0 – shmget – -1 Zusätzliche Fehler werden über errno (vom Typ int) an Anwendung übermittelt
4
4 errno Header muss eingebunden werden. Errno ist keine (globale) Variable – Wäre nicht re-entrant – Abhängig von Plattform Auf Linux/Cygwin als Makro implementiert
5
5 errno (2) Definitionen der Fehlercodes in /usr/include/errno.h, z.B.: #define EPERM 1 /* Not super-user */ #define ENOENT 2 /* No such file or dir */ #define ESRCH 3 /* No such process */ #define EINTR 4 /* Interrupted system call */ #define EIO 5 /* I/O error */ Fehlercodes können system-abhängig sein – Immer Macros EPERM etc. verwenden
6
6 Vorsicht bei geschachtelte Funktionen strcpy(malloc(strlen(my_str)+1, my_str); – malloc kann fehl schlagen – strcpy arbeitet in diesem Fall mit NULL-Zeiger Lieber einzelne Schritte explizit programmieren ptr = (char *)malloc(strlen(my_str)+1); if (!ptr) { … /* Fehlerbehandlung */ } strcpy(ptr, my_str);
7
7 Typische Fehlerbehandlung in DB2 UDB sqlzRc myFunction(…) { sqlzRc rc = SQL_OK; char *buffer = NULL; … buffer = (char *)malloc(length); if (!buffer) { rc = SQLZ_OUT_OF_MEMORY; goto cleanup; }
8
8 Typische Fehlerbehandlung in DB2 UDB (2) rc = sqluimpr(…); if (rc != SQL_OK) { goto cleanup; } … cleanup: if (buffer != NULL) { free(buffer); }
9
9 Fehlerbehandlung Im Fehlerfall muss jede Funktion einen wohl- definierten Zustand zurücklassen, z.B. – Allokierten Speicher wieder freigeben – Geänderte Signal-Händler zurücksetzen – Fehlermeldungen setzen Nie, nie und nie exit oder abort verwenden!!! – Funktion kann innerhalb Bibliothek von anderen Programmen verwendet werden – exit/abort würde Programm beenden – Fehler einfach zum Aufrufer immer durchreichen
10
10 Numerische Besonderheiten Keine Laufzeitüberprüfungen bei numerischen Operationen – Überläufe und Unterläufe möglich; werden nicht erkannt müssen von Anwendung abgefangen werden Integer-Zahlen – signed/unsigned char/short/int/long/long long – Grenzen (min/max) in festgelegt Numerische Genauigkeit von Fliesskommazahlen
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.