Werfen eine Ausnahme in C
- eine Übersicht der Ausnahmen
- Behandeln eine Ausnahme in der Programmiersprache C
-
die Funktion
setjmp()
zur Behandlung von Fehlern in C -
Fehlerbehandlung mit
errno
in C implementieren -
Verwenden Sie
perror()
undstrerror()
, um die Fehlermeldungen zu drucken - Umgang mit Division durch Null Fehlern
In diesem Artikel wird erläutert, wie Sie mit einer Ausnahme oder einem Fehler in der Programmiersprache C umgehen.
eine Übersicht der Ausnahmen
Der Versuch, durch Null zu dividieren, ist ein Beispiel für eine Situation, die eine Ausnahme auslösen kann, die eine Reaktion auf ein außergewöhnliches Szenario ist, das während der Ausführung eines Programms auftreten kann.
Mit Hilfe einer Ausnahme
kann die Kontrolle von einem Programmabschnitt an einen anderen übergeben werden.
Behandeln eine Ausnahme in der Programmiersprache C
Auch wenn C keine direkte Unterstützung für die Fehlerbehandlung (auch Ausnahmebehandlung genannt) bietet, gibt es Methoden, mit denen die Fehlerbehandlung in C durchgeführt werden kann. Um Probleme von vornherein zu vermeiden, muss ein Programmierer Vorkehrungen treffen und die zurückgegebenen Werte untersuchen durch die Funktionen.
Viele Aufrufe von C-Funktionen liefern im Fehlerfall den Wert -1
oder NULL
zurück. Daher kann die Durchführung eines Schnelltests an diesen Rückgabewerten schnell und effizient durchgeführt werden, indem beispielsweise eine if
-Anweisung verwendet wird.
die Funktion setjmp()
zur Behandlung von Fehlern in C
Die Simulation der Ausnahmebehandlungsfunktionalität anderer Programmiersprachen ist mit der Funktion setjmp()
möglich. Beim ersten Aufruf von setjmp()
wird ein Referenzpunkt zum aktuellen Punkt in der Programmausführung gespeichert.
Dieser Referenzpunkt bleibt gültig, solange die Funktion, die setjmp()
enthält, nicht zurückkehrt oder beendet wird. Wenn Sie longjmp()
aufrufen, kehrt die Ausführung zu dem Punkt zurück, an dem der entsprechende setjmp()
-Aufruf erfolgte.
Der Parameter von setjmp()
ist jmp buf
, was ein Typ ist, der einen Ausführungskontext enthalten kann, und er gibt 0
zurück, wenn er das allererste Mal ausgeführt wird (wenn er den Rückkehrpunkt setzt). Der an longjmp()
gelieferte Wert wird dann zurückgegeben, wenn das Programm zum zweiten Mal ausgeführt wird, wenn longjmp()
aufgerufen wird.
Als Input für longjmp()
wird ein zuvor an setjmp()
übergebenes jmp buf
benötigt, zusammen mit einem Wert, der als Rückgabewert an setjmp()
übergeben werden soll.
Wenn in tief verschachtelten Funktionsaufrufen Fehler auftreten, wäre es mühsam, die Rückgabewerte an der Stelle zu überprüfen, an die Sie zurückkehren möchten. Hier sind setjmp()
und longjmp()
am nützlichsten.
Quellcode:
#include <setjmp.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int value;
jmp_buf environment;
value =
setjmp(environment); // value is set to 0 the first time this is called
if (value != 0) {
printf("You have just executed a longjmp call, and the return value is %d.",
value); // now, value is 1, passed from longjmp()
exit(0);
}
puts("Performing longjmp call\n");
longjmp(environment, 1);
return (0);
}
Ausgang:
Performing longjmp call
You have just executed a longjmp call, and the return value is 1
Fehlerbehandlung mit errno
in C implementieren
Wenn ein Funktionsaufruf in C ausgeführt wird, erhält eine als errno
bezeichnete Variable automatisch einen Code (Wert), der verwendet werden kann, um das aufgetretene Problem zu bestimmen. Dieser Code kann verwendet werden, um festzustellen, wo der Fehler aufgetreten ist.
Es ist eine globale Variable, die Ihnen mitteilt, welche Art von Fehler aufgetreten ist, wenn Sie eine Funktion aufgerufen haben, und sie wird in der Header-Datei errno.h
angegeben. Fehler verschiedener Art werden durch eindeutige Codes oder Werte für die Variable errno
gekennzeichnet.
Das Folgende ist eine Liste mit vielen unterschiedlichen errno
-Werten, die jeweils einer bestimmten Bedeutung entsprechen.
errno Wert |
Fehlermeldung |
---|---|
1 | Operation unzulässig |
2 | Keine solche Datei oder Verzeichnis |
3 | Kein solches Verfahren |
4 | Unterbrochener Systemaufruf |
5 | E/A-Fehler |
6 | Kein solches Gerät oder Adresse |
7 | Argumentliste zu lang |
8 | Exec-Formatfehler |
9 | Falsche Dateinummer |
10 | Keine untergeordneten Prozesse |
11 | Versuchen Sie es erneut |
12 | Aus dem Gedächtnis |
13 | Zugriff verweigert |
Quellcode:
#include <errno.h>
#include <stdio.h>
int main() {
FILE* fp;
fp = fopen("abc.txt", "r");
printf("The value of errno is: %d\n", errno);
return 0;
}
Ausgang:
The value of errno is: 2
In diesem Fall wird errno
auf 2 gesetzt, was bedeutet, dass es weder eine Datei noch ein Verzeichnis mit diesem Namen gibt.
Verwenden Sie perror()
und strerror()
, um die Fehlermeldungen zu drucken
Die Art der aufgetretenen Fehler wird durch den oben erhaltenen Wert errno
angezeigt.
Wenn es notwendig ist, die Fehlerbeschreibung anzuzeigen, können zwei Funktionen verwendet werden, um eine Textnachricht anzuzeigen, die mit der Fehlernummer
verbunden ist.
perror()
zeigt die von Ihnen angegebene Zeichenfolge an, fügt ein Leerzeichen ein, dann den Doppelpunkt und beschreibt schließlich den errno
-Wert. Das strerror()
bezieht sich auf die Beschreibung des aktuellen Werts von errno
.
Quellcode:
#include <errno.h>
#include <stdio.h>
#include <string.h>
int main() {
FILE *fp;
fp = fopen(" abc.txt ", "r");
printf("The value of errno is: %d\n", errno);
printf("The error message is: %s\n", strerror(errno));
perror("perror Message");
return 0;
}
Ausgang:
The value of errno is: 2
The error message is: No such file or directory
Message from perror: No such file or directory
Umgang mit Division durch Null Fehlern
Beim Umgang mit Fehlern oder Ausnahmen ist dies bei weitem das häufigste Problem, das zur Diskussion gestellt wird.
Häufig werden wir mathematische Aussagen präsentieren wie:
c = a / b;
Aber wir vergessen oft, dass der Wert von b
unter Umständen wahrscheinlich null
sein wird.
Die Division einer ganzen Zahl durch Null
ist in der Mathematik nicht erlaubt. Die Leute glauben oft, dass die Lösung niemals erreicht werden kann, was bedeutet, dass die Lösung unendlich ist.
Leider ist dies nicht der Fall. In diesem speziellen Szenario lautet die richtige Antwort nicht angegeben
. Unter Verwendung der Prinzipien der Verwaltung von Ausnahmen und Fehlern in C ist das folgende Programm, das dieses Problem löst.
Quellcode:
#include <stdio.h>
#include <stdlib.h>
int main() {
int dividend;
int divisor;
int quotient;
printf("Enter the value for dividend: ");
scanf("%d", ÷nd);
printf("Enter the value for divisor: ");
scanf("%d", &divisor);
if (divisor == 0) {
fprintf(stderr, "\nDivision by zero is not possible!\n");
exit(-1);
}
quotient = dividend / divisor;
fprintf(stderr, "The value of quotient: %d\n", quotient);
exit(0);
return 0;
}
Ausgang:
Geben Sie einen Null
-Wert ein.
Enter the value for dividend: 100
Enter the value for divisor: 0
Division by zero is not possible!
Geben Sie einen Nicht-Null
-Wert ein.
Enter the value for dividend: 100
Enter the value for divisor: 5
The value of quotient: 20
I am Waqar having 5+ years of software engineering experience. I have been in the industry as a javascript web and mobile developer for 3 years working with multiple frameworks such as nodejs, react js, react native, Ionic, and angular js. After which I Switched to flutter mobile development. I have 2 years of experience building android and ios apps with flutter. For the backend, I have experience with rest APIs, Aws, and firebase. I have also written articles related to problem-solving and best practices in C, C++, Javascript, C#, and power shell.
LinkedIn