A Try Catch nyilatkozatok használata C-ben

A Try Catch Nyilatkozatok Hasznalata C Ben



A „try” és „catch” szavak leírják, hogy mit kell tenni, ha egy program kód- vagy adatprobléma miatt kivételt talál. A kivételeket a próbáld ki kódblokk. A fogási blokkokat a próbablokkok kivételeinek megtalálására és kezelésére használják. Számos programozási nyelv, köztük a Python, a C++ és a JavaScript, ide tartozik próba-elkapni nyilatkozatok.

Ez a cikk bemutatja, mi az a try-catch utasítás, és hogyan valósítható meg egy példa segítségével a C programozásban.

Mi az a próbafogási nyilatkozat?

A próbáld ki utasítás olyan utasítások gyűjteményét határozza meg, amelyek kivételt hozhatnak létre. Ha egy bizonyos típusú kivétel történik, a kivétel elküldése a fogási blokkba kerül. A fordító vagy hibaüzenetet ad ki, vagy a kivétel továbbra is felfelé halad a hívási veremben, amíg meg nem szólítja, ha a try/catch blokk nem tudja kezelni.







Az általános szintaxis a próba-elkapni nyilatkozatot adják meg:



próbáld ki {
/*
Illesszen be néhány kódot, amely valószínűleg hibákat generál
*/
}
fogás {
/*
Írj egy kódot számára a keletkezett hibák kezelése.
*/
}

Mi az a try-catch utasítás C nyelven?

A C nem támogatja a kivételkezelést és nincs beépített mechanizmusa erre. Ezt azonban bizonyos mértékig szimulálhatja a használatával setjmp és longjmp hívásokat. Ha nincs mód a memória felszabadítására a verem meglátogatása után, a kivételkezelő mechanizmusok nem hatékonyak és nem biztonságosak, és a C-ben nincs szemétgyűjtő. A RAM felszabadításához valószínűleg kontextuskezelőket is integrálnunk kell.



Most, ahogy a kódot fejlesztjük, fokozatosan meg fogjuk alkotni a megoldást. A longjmp és a setjmp két C függvény, amelyet a setjmp.h fejlécfájl biztosíthat, és mi használjuk. A setjmp függvény elfogadja a jmp_buf típusú változókat, és 0-t ad vissza, amikor közvetlenül hívják. Ha ugyanazt a jmp_buf változót használják a longjmp két változóval történő meghívására, a setjmp függvény olyan értéket ad vissza, amely megegyezik a longjmp második argumentumának értékével.





Egy példa a fenti megvalósításra:

#include
#include
#define TRY do { jmp_buf buf_state; if ( !setjmp(buf_state)) {
#define CATCH } else {
#define ENDTRY }} while(0)
#define DOBÁS longjmp(buf_state, 1)
int fő ( )
{
PRÓBÁLD KI {
printf ( 'Próbáld ki a nyilatkozattesztet \n ' ) ;
DOBÁS;
printf ( 'Az utasításnak nem szabad megjelennie, mivel a THOW blokk már kivételt tett \n ' ) ;
}
FOGÁS {
printf ( 'Kivétel van \n ' ) ;
}
ENDTRY;
Visszatérés 0 ;
}

A fenti C programban a ENDTRY A funkció a do-while blokk záró részének biztosítására szolgál.



Következtetés

Ha egy program adat- vagy kódolási hiba miatt kivételt talál futás közben, ' próbáld ki ” és „ fogás ” írja le, hogyan kell kezelni. Az a próbáld ki kódblokk, kivételek fordulnak elő, miközben a fogás blokk ahonnan a hibák származnak próbáld ki blokkokat találnak és kezelnek. Számos programozási nyelv támogatja a próba-elkapni blokkolja, de a C nem. Ez az útmutató egy módszert ír le a try-catch utasítások használatára a C programozásban.