Jak používat příkazy Try Catch v C

Jak Pouzivat Prikazy Try Catch V C



Slova „zkusit“ a „chytit“ popisují, co dělat, když program narazí na výjimku kvůli problému s kódem nebo daty. Výjimky jsou řešeny v a Snaž se blok kódu. Bloky catch se používají k nalezení a zpracování výjimek z bloků try. Mnoho programovacích jazyků, včetně Pythonu, C++ a JavaScriptu, zahrnuje Zkus chytit prohlášení.

Tento článek ukazuje, co je příkaz try-catch a jak je implementován pomocí příkladu v programování v jazyce C.

Co je to příkaz Try Catch?

The Snaž se příkaz definuje kolekci příkazů, které mohou vytvořit výjimku. Když dojde k určitému druhu výjimky, je výjimka odeslána do bloku catch. Kompilátor buď vypíše chybové hlášení, nebo výjimka bude pokračovat v pohybu v zásobníku volání, dokud nebude adresována, pokud ji blok try/catch nezvládne.







Obecná syntaxe Zkus chytit prohlášení je uvedeno jako:



Snaž se {
/*
Vložte nějaký kód, který pravděpodobně bude generovat chyby
*/
}
chytit {
/*
Napište kód pro zpracování generovaných chyb.
*/
}

Co je to příkaz try-catch v C?

C nepodporuje zpracování výjimek a nemá k tomu vestavěný mechanismus. Můžete to však do určité míry simulovat pomocí setjmp a longjmp hovory. Bez způsobu, jak uvolnit paměť po návštěvě zásobníku, jsou mechanismy zpracování výjimek neefektivní a nebezpečné a C nemá garbage collector. Abychom uvolnili RAM, pravděpodobně bychom také potřebovali integrovat kontextové manažery.



Nyní, když provádíme vylepšení kódu, postupně vytvoříme řešení. Longjmp a setjmp jsou dvě funkce C, které mohou být poskytovány hlavičkovým souborem setjmp.h, který využijeme. Funkce setjmp přijímá proměnné typu jmp_buf a při přímém volání vrací 0. Když je stejná proměnná jmp_buf použita k vyvolání longjmp se dvěma proměnnými, vrátí funkce setjmp hodnotu, která odpovídá hodnotě druhého argumentu longjmp.





Příklad výše uvedené implementace je uveden jako:

#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 ( )
{
SNAŽ SE {
printf ( „Zkuste test výpisů \n ' ) ;
HÁZET;
printf ( 'Prohlášení by se nemělo objevit, protože blok THROW již vyvolal výjimku \n ' ) ;
}
CHYTIT {
printf ( 'Dostal výjimku \n ' ) ;
}
ENDTRY;
vrátit se 0 ;
}

Ve výše uvedeném programu C je ENDTRY funkce se používá pro zajištění uzavírací části bloku do-while.



Závěr

Pokud program během běhu narazí na výjimku kvůli chybě dat nebo kódování, “ Snaž se ' a ' chytit “ popsat, jak to spravovat. V Snaž se bloku kódu, dochází k výjimkám, když a chytit blok je místo, odkud chyby Snaž se bloky jsou nalezeny a zpracovány. Mnoho programovacích jazyků podporuje Zkus chytit blok, ale C ne. Tato příručka popisuje metodu použití příkazů try-catch v programování C.