Fehlerbehandlungstechniken
Fehlerbehandlungsablauf
graph TD
A[Programmstart] --> B{Fehlerbedingung}
B --> |Fehler erkannt| C[Fehler protokollieren]
C --> D[Ressourcen freigeben]
D --> E[Beenden mit Fehlercode]
B --> |Kein Fehler| F[Fortsetzung der Ausführung]
Fehlercodestrategie
Fehlerbereich |
Bedeutung |
0-31 |
Systemreserviert |
32-127 |
Anwendungsbezogene Fehler |
128-255 |
Signalbezogene Beendigungscodes |
Umfassendes Beispiel für Fehlerbehandlung
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#define FILE_ERROR 50
#define MEMORY_ERROR 51
void log_error(int error_code, const char* message) {
fprintf(stderr, "Fehler %d: %s\n", error_code, message);
}
int main() {
FILE *file = fopen("data.txt", "r");
if (file == NULL) {
log_error(FILE_ERROR, "Datei kann nicht geöffnet werden");
exit(FILE_ERROR);
}
char *buffer = malloc(1024);
if (buffer == NULL) {
log_error(MEMORY_ERROR, "Speicherallokation fehlgeschlagen");
fclose(file);
exit(MEMORY_ERROR);
}
// Dateibearbeitungslogik
free(buffer);
fclose(file);
return EXIT_SUCCESS;
}
Erweiterte Fehlerbehandlungstechniken
Verwendung von errno für detaillierte Fehler
#include <errno.h>
#include <string.h>
#include <stdlib.h>
void handle_system_error() {
if (errno != 0) {
fprintf(stderr, "Fehler: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
}
Fehlerbehandlungsmuster
- Sofortiges Beenden
- Protokollieren und Fortfahren
- Graduelle Degradierung
- Wiederholungsmechanismus
Benutzerdefinierte Fehlerbehandlungsstruktur
typedef struct {
int code;
const char* message;
void (*handler)(void);
} ErrorHandler;
ErrorHandler error_map[] = {
{FILE_ERROR, "Datei-Operation fehlgeschlagen", cleanup_file_resources},
{MEMORY_ERROR, "Speicherallokationsfehler", release_resources}
};
LabEx-Entwicklungstipp
In LabEx-Umgebungen ist die Implementierung einer robusten Fehlerbehandlung entscheidend für die Erstellung zuverlässiger und wartbarer C-Programme.
Best Practices
- Konsistente Fehlercodes verwenden
- Aussagekräftige Fehlermeldungen bereitstellen
- Ressourcen immer freigeben
- Fehler für die Fehlersuche protokollieren
- Verschiedene Fehlerfälle behandeln
Strategien zur Fehlerweitergabe
graph LR
A[Fehlererkennung] --> B{Fehlertyp}
B --> |Wiederherstellbar| C[Protokollieren und Fortfahren]
B --> |Kritisch| D[Programm beenden]
B --> |Fatal| E[Sofortige Beendigung]
Empfohlener Ansatz zur Fehlerbehandlung
- Fehler frühzeitig erkennen
- Deskriptive Fehlercodes verwenden
- Umfassende Protokollierung implementieren
- Sicherstellung der Ressourcenbereinigung
- Klare Fehlermeldungen bereitstellen