Verwendung von Try-Catch-Anweisungen in C

Verwendung Von Try Catch Anweisungen In C



Die Wörter „try“ und „catch“ beschreiben, was zu tun ist, wenn ein Programm aufgrund eines Code- oder Datenproblems auf eine Ausnahme stößt. Ausnahmen werden in a behandelt versuchen Codeblock. Catch-Blöcke werden verwendet, um Ausnahmen von Try-Blöcken zu finden und zu behandeln. Viele Programmiersprachen, darunter Python, C++ und JavaScript, umfassen versuchen-fangen Aussagen.

Dieser Artikel zeigt anhand eines Beispiels in der C-Programmierung, was eine Try-Catch-Anweisung ist und wie sie implementiert wird.

Was ist eine Try-Catch-Anweisung?

Der versuchen Die Anweisung definiert eine Sammlung von Anweisungen, die möglicherweise eine Ausnahme erzeugen. Wenn eine bestimmte Art von Ausnahme auftritt, wird die Ausnahme an den Catch-Block gesendet. Der Compiler gibt entweder eine Fehlermeldung aus oder die Ausnahme wandert im Aufrufstapel weiter nach oben, bis sie behandelt wird, wenn der Try/Catch-Block sie nicht verarbeiten kann.







Die allgemeine Syntax der versuchen-fangen Die Aussage lautet wie folgt:



versuchen {
/*
Fügen Sie Code ein, der wahrscheinlich Fehler erzeugen wird
*/
}
fangen {
/*
Schreiben Sie einen Code für Umgang mit den erzeugten Fehlern.
*/
}

Was ist eine Try-Catch-Anweisung in C?

C unterstützt keine Ausnahmebehandlung und verfügt nicht über einen eingebauten Mechanismus dafür. Sie können dies jedoch bis zu einem gewissen Grad mit simulieren setjmp Und longjmp Anrufe. Ohne eine Möglichkeit, Speicher freizugeben, sobald der Stapel besucht wurde, sind Ausnahmebehandlungsmechanismen ineffizient und unsicher, und C verfügt nicht über einen Garbage Collector. Um RAM freizugeben, müssten wir wahrscheinlich auch Kontextmanager integrieren.



Während wir nun Codeverbesserungen vornehmen, werden wir nach und nach eine Lösung entwickeln. Longjmp und setjmp sind zwei C-Funktionen, die von uns in der Header-Datei setjmp.h bereitgestellt werden können. Die Funktion setjmp akzeptiert Variablen vom Typ jmp_buf und gibt 0 zurück, wenn sie direkt aufgerufen wird. Wenn dieselbe jmp_buf-Variable verwendet wird, um longjmp mit zwei Variablen aufzurufen, gibt die Funktion setjmp einen Wert zurück, der mit dem Wert des zweiten Arguments von longjmp übereinstimmt.





Ein Beispiel für die obige Implementierung ist:

#include
#include
#define TRY do { jmp_buf buf_state; if ( !setjmp(buf_state)) {
#define CATCH } else {
#define ENDTRY }} while(0)
#define THROW longjmp(buf_state, 1)
int main ( )
{
VERSUCHEN {
printf ( „Versuchen Sie es mit Anweisungstests \N ' ) ;
WURF;
printf ( „Die Anweisung sollte nicht erscheinen, da der THROW-Block die Ausnahme bereits ausgelöst hat \N ' ) ;
}
FANGEN {
printf ( „Ausnahme erhalten \N ' ) ;
}
ENDTRY;
zurückkehren 0 ;
}

Im obigen C-Programm ist die ENDTRY Die Funktion wird zum Bereitstellen des abschließenden Teils des Do-While-Blocks verwendet.



Abschluss

Wenn ein Programm während der Ausführung aufgrund eines Daten- oder Codierungsfehlers auf eine Ausnahme stößt, „ versuchen ' Und ' fangen „Beschreiben Sie, wie man damit umgeht. In einem versuchen Codeblock, Ausnahmen treten auf, während a fangen Block ist, wo Fehler herkommen versuchen Blöcke werden gefunden und bearbeitet. Viele Programmiersprachen unterstützen das versuchen-fangen blockieren, aber das C nicht. In diesem Handbuch wurde eine Methode zur Verwendung von Try-Catch-Anweisungen in der C-Programmierung beschrieben.