Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

Foutafhandeling in C: Best Practices & Technieken

C-programmeren biedt geen directe ondersteuning voor foutafhandeling, maar als systeemprogrammeertaal geeft het toegang op lager niveau in de vorm van retourwaarden. De meeste C- of Unix-functie-aanroepen retourneren -1 of NULL in het geval van een fout en stellen een foutcode errno in. Dit is ingesteld als een globale variabele en geeft aan dat er een fout is opgetreden tijdens een functie-aanroep. Je kunt verschillende foutcodes vinden gedefinieerd in het <error.h> header-bestand.

Een C-programmeur kan de geretourneerde waarden controleren en passende actie ondernemen afhankelijk van de retourwaarde. Het is een goede praktijk om errno op 0 in te stellen tijdens het initialiseren van een programma. Een waarde van 0 geeft aan dat er geen fout in het programma is.

errno, perror() en strerror()

De C-programmeertaal biedt perror() en strerror() functies die gebruikt kunnen worden om de tekstmelding weer te geven die geassocieerd is met errno.

  • De perror() functie toont de string die je doorgeeft, gevolgd door een dubbele punt, een spatie, en daarna de tekstuele weergave van de huidige errno waarde.

  • De strerror() functie, die een pointer retourneert naar de tekstuele weergave van de huidige errno waarde.

Laten we een foutconditie simuleren en proberen een bestand te openen dat niet bestaat. Hier gebruik ik beide functies om het gebruik te tonen, maar je kunt een of meer manieren van het printen van je fouten gebruiken. Een tweede belangrijk punt is dat je stderr bestandsstroom moet gebruiken om alle fouten uit te voeren.

#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, "Waarde van errno: %d\n", errno);
        perror("Fout afgedrukt door perror");
        fprintf(stderr, "Fout bij openen bestand: %s\n", strerror( errnum ));
    } else {
        fclose (pf);
    }
    return 0;
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, produceert het het volgende resultaat:

Waarde van errno: 2
Fout afgedrukt door perror: No such file or directory
Fout bij openen bestand: No such file or directory

Delen door Nul Fouten

Het is een veelvoorkomend probleem dat programmeurs bij het delen van een getal niet controleren of een deler nul is en uiteindelijk een runtime fout ontstaat.

De onderstaande code lost dit op door te controleren of de deler nul is voordat er gedeeld wordt:

Live Demo
#include <stdio.h>
#include <stdlib.h>
main() {
    int dividend = 20;
    int divisor = 0;
    int quotient;
    if( divisor == 0){
        fprintf(stderr, "Delen door nul! Afsluiten...\n");
        exit(-1);
    }
    quotient = dividend / divisor;
    fprintf(stderr, "Waarde van quotient : %d\n", quotient );
    exit(0);
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, produceert het het volgende resultaat:

Delen door nul! Afsluiten...

Programma Exit Status

Het is een veelvoorkomende praktijk om af te sluiten met een waarde van EXIT_SUCCESS in het geval het programma na een succesvolle operatie afsluit. Hier is EXIT_SUCCESS een macro en gedefinieerd als 0.

Als je een foutconditie in je hebt en je sluit af, dan moet je afsluiten met een status EXIT_FAILURE wat gedefinieerd is als -1. Laten we het bovenstaande programma als volgt schrijven:

Live Demo
#include <stdio.h>
#include <stdlib.h>
main() {
    int dividend = 20;
    int divisor = 5;
    int quotient;
    if( divisor == 0) {
        fprintf(stderr, "Delen door nul! Afsluiten...\n");
        exit(EXIT_FAILURE);
    }
    quotient = dividend / divisor;
    fprintf(stderr, "Waarde van quotient : %d\n", quotient );
    exit(EXIT_SUCCESS);
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, produceert het het volgende resultaat:

Waarde van quotient : 4

C Taal

  1. Beste Praktijken Voor Het Opslaan En Hanteren Van Aandrijfriemen
  2. Materiaalhandling Begrijpen: Sleutelconcepten & Best Practices
  3. Vier sleuteltypes materiaalafhandelingsapparatuur voor efficiënte operaties
  4. Materialenhantering Veiligheid Beheersen: Best Practices Voor Efficiënte, Risicovrije Operaties
  5. ADC Code Error Rates Beheersen: Wat U Moet Weten
  6. C Bestandsbehandeling: I/O onder de knie krijgen met fopen, fprintf, fread en fseek
  7. Bestandsoperaties in C# – Een Praktische Gids
  8. C++ Signaalverwerking onder de knie: Veilige interruptafhandeling en schone programmaterminatie
  9. C# Exception Handling Beheersen: Strategieën & Best Practices
  10. Python uitzonderingsafhandeling meesteren: Een uitgebreide gids
  11. Java Exception Handling meesteren: Try, Catch, Finally, Throw & Throws uitgelegd