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.