Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

Fehlerbehandlung in C meistern: Best Practices & Techniken

An sich bietet die C-Programmierung keine direkte Unterstützung für Fehlerbehandlung, aber als Systemprogrammiersprache bietet sie Ihnen Zugriff auf niedrigerer Ebene in Form von Rückgabewerten. Die meisten C- oder sogar Unix-Funktionsaufrufe geben -1 oder NULL im Fehlerfall zurück und setzen einen Fehlercode errno. Dieser wird als globale Variable gesetzt und zeigt an, dass während eines Funktionsaufrufs ein Fehler aufgetreten ist. Verschiedene Fehlercodes finden Sie in der Header-Datei <error.h>.

Ein C-Programmierer kann die Rückgabewerte überprüfen und je nach Rückgabewert entsprechende Maßnahmen ergreifen. Es ist eine gute Praxis, errno bei der Initialisierung eines Programms auf 0 zu setzen. Ein Wert von 0 zeigt an, dass es keinen Fehler im Programm gibt.

errno, perror() und strerror()

Die C-Programmiersprache stellt die Funktionen perror() und strerror() bereit, die verwendet werden können, um die mit errno verbundene Textmeldung anzuzeigen.

Versuchen wir, eine Fehlerbedingung zu simulieren und zu versuchen, eine Datei zu öffnen, die nicht existiert. Hier verwende ich beide Funktionen, um die Verwendung zu zeigen, aber Sie können eine oder mehrere Methoden zum Drucken Ihrer Fehler verwenden. Ein zweiter wichtiger Punkt ist, dass Sie den stderr-Dateistream verwenden sollten, um alle Fehler auszugeben.

#include <stdio.h>
#include <errno.h>
#include <string.h>
extern int errno;
int main() {
    FILE *pf;
    int errnum;
    pf = fopen("unexist.txt", "rb");
    if (pf == NULL) {
        errnum = errno;
        fprintf(stderr, "Value of errno: %d\n", errno);
        perror("Error printed by perror");
        fprintf(stderr, "Error opening file: %s\n", strerror(errnum));
    } else {
        fclose(pf);
    }
    return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis:

Value of errno: 2
Error printed by perror: No such file or directory
Error opening file: No such file or directory

Division durch Null Fehler

Es ist ein häufiges Problem, dass Programmierer beim Dividieren einer Zahl nicht überprüfen, ob der Divisor null ist, was schließlich einen Laufzeitfehler verursacht.

Der folgende Code behebt dies, indem er überprüft, ob der Divisor null ist, bevor er dividiert:

Live Demo
#include <stdio.h>
#include <stdlib.h>
main() {
    int dividend = 20;
    int divisor = 0;
    int quotient;
    if (divisor == 0) {
        fprintf(stderr, "Division by zero! Exiting...\n");
        exit(-1);
    }
    quotient = dividend / divisor;
    fprintf(stderr, "Value of quotient : %d\n", quotient);
    exit(0);
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis:

Division by zero! Exiting...

Programm-Exit-Status

Es ist gängige Praxis, mit dem Wert EXIT_SUCCESS zu beenden, falls das Programm nach einem erfolgreichen Vorgang beendet wird. Hierbei ist EXIT_SUCCESS ein Makro und als 0 definiert.

Wenn Sie eine Fehlerbedingung in Ihrem Programm haben und beenden, sollten Sie mit dem Status EXIT_FAILURE beenden, der als -1 definiert ist. Schreiben wir das obige Programm entsprechend um:

Live Demo
#include <stdio.h>
#include <stdlib.h>
main() {
    int dividend = 20;
    int divisor = 5;
    int quotient;
    if (divisor == 0) {
        fprintf(stderr, "Division by zero! Exiting...\n");
        exit(EXIT_FAILURE);
    }
    quotient = dividend / divisor;
    fprintf(stderr, "Value of quotient : %d\n", quotient);
    exit(EXIT_SUCCESS);
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis:

Value of quotient : 4

C Sprache

  1. C-Dateiverwaltung: I/O mit fopen, fprintf, fread & fseek meistern
  2. Java Exception Handling meistern: Try, Catch, Finally, Throw & Throws erklärt
  3. ADC Code Error Rates meistern: Was Sie wissen müssen
  4. Best Practices für Lagerung und Handhabung von Antriebsriemen
  5. Dateioperationen in C# – Ein praktischer Leitfaden
  6. C++ Signalverarbeitung meistern: Sichere Interrupt-Verwaltung und saubere Programmausführung
  7. C# Exception Handling: try, catch, finally, throw & Best Practices
  8. Python Exception Handling: Umfassender Leitfaden zur Fehlerbehandlung
  9. Materialhandling-Sicherheit: Best Practices für effiziente, risikofreie Prozesse
  10. Material Handling verstehen: Schlüsselkonzepte & Best Practices