kivételkezelés, programozás C és C

kivételkezeléssel (kivételkezelés) lehetővé teszi, hogy racionalizálja a feldolgozása futásidejű hibákat. A kivételkezelés a C ++, a program automatikusan okozhatja a hibát-kezelő funkciót, ha ez a hiba. A fő méltó stvom kivételkezelés, hogy lehetővé teszi, hogy automatizálják a legtöbb kódot kezelési hibák, amelyek korábban szükséges kézi kódolás.







Kivétel-alapú feldolgozás

Kivétel kezelése C ++ segítségével a három kulcsszó: próbálja, elkap, és dobja. Azok program utasításait, amelyek a kivételek lehetőségét szereplő blo-ke próbálni. Ha a try blokk emel kivételt, ez van. E. A hiba, akkor kivételt dob. SUP-chenie fogott fogás nyilatkozatot, és feldolgozni. Az alábbi egy általános leírás lesz látszó-versenyek részletesebben.

Instruction kivételt állít elő, el kell végezni a belső try blokk. Kiváltott try blokk funkció is generál kivételek. Bármilyen kivétel újra kell hvacheno használati fogás, amely közvetlenül követi az utasítást próbát, akkor kivételt dob-nyak. Az általános formája try és catch blokkok alábbiakban mutatjuk be:

próbálja // próbáld blokk
catch (type1 érv) // catch blokkban
catch (type2 érv) // catch blokkban
catch (tipZ érv) // catch blokkban
>
.
catch (tipN érv) // catch blokkban
>

próbálja blokk méretek is tág határok között változtatható. Például a try blokk tartalmazhat több utasítást egy függvény, vagy ezzel szemben tartalmazza az összes kódot funkció main (), úgy, hogy a teljes program fedezi kivételkezelés.

Ha kivételt dobott, akkor elkapja a megfelelő utasítást fogási nyilatkozatot, kivétel feldolgozás. Egy blokk lehet próbálni, hogy válaszolni néhány fogás, milyen fogás utasítás végrehajtása függ, hogy milyen típusú kivétel. Ez azt jelenti, hogy ha az adatok típusát a fogási nyilatkozat megfelel a fajta kivétel adatok csak az, hogy a fogási nyilatkozat végrehajtásra kerül. Ha kivételt fogott, arg kapja az értékét. Elfogott lehet bármilyen adatot, köztük osztályok a programozó. Ha nincs kivétel nem keletkezik, vagyis nincs hiba történt a try blokkban, a fogási nyilatkozatokat nem kerül végrehajtásra.

Az általános formája a dobás nyilatkozatot rekord:

dobás utasítást kell végrehajtani, vagy a try blokkban, vagy olyan függvény a próbát egységet. A fenti kifejezés kizárás rögzített padlózatra generált érték.

Ha a kivételt dobott, amelyekre nincs megfelelő használati fogási nyilatkozatot, abnormális program megszűnése előfordulhat. Létrehozásakor kezelt kivétel
hívások megszüntetheti () függvény. Alapértelmezésben megszüntetni () hívások megszakítja () függvény vezető befejezni a programot. Azonban, akkor beállíthatja a saját feldolgozás segítségével szórakoztató-ktsiyu set_terminate (). A részletek megtalálhatók a dokumentációban a fordító.







Az alábbiakban egy példa eljárást illusztráló kivételkezelésre C ++:

// példa egy egyszerű kivételkezelés
#include
int main ()
cout <<"Start\n";
megpróbál cout <<"Inside try block\n";
dobja 100; // hibát generál
cout <<"This will not execute";
>
catch (int i) cout <<"Caught an exception -- value is: ";
cout <>
cout <<"End";
vissza 0;
>

A program megjeleníti a következő szöveg lép:

kezdet
Belül try blokk
Fogott egy kivétel - érték: 100
vég

Tekintsük ezt a programot alaposan. Mint látható, a try blokkon belül három utasításokat. Majd a fogási nyilatkozatot (int i), a kivételek kezelése egész szám jellegű. A try blokk kerül végrehajtásra csak két utasítást: az első és a második - dobás. Miután a kivétel keletkezett, a vezérlés fogni kimutatások és próbálja blokk leáll annak végrehajtását. Így fogást nem hívott. Inkább azt mondhatjuk, hogy az áthalad a program végrehajtását. Ehhez automatikusan átvezetik verem újratelepítése. Így inst ruktsiya után dobja állítás nem végezték ki.

Jellemzően a kódot a fogási utasítást igyekszik korrigálni a hibát, hogy elvégezzük a megfelelő lépéseket. Ha a hiba kijavítása végrehajtása folytatódik a nyilatkozat közvetlen kormányzati követően a fogás. Néha azonban nem tud megbirkózni a hiba, és a blokk-fogás Zavar gyűrődéseket program hívja a exit () vagy megszakítja () függvényt.

Mint említettük, a kivétel meg kell egyeznie az típusát a megjelenő utasításokat. Például méri az előző példában, ha megváltoztatja a típusát fogási nyilatkozat megkétszereződik, a kivétel nem fogott, és lesz egy program összeomlik. Ez a változás az alábbi ábrán látható:

// ez a példa nem fog működni
#include
int main ()
cout <<"Start\n";
megpróbál cout <<"Inside try block\n";
dobja 100; // hibát generál
cout <<"This will not execute";
>
fogási (dupla i) cout <<"Caught an exception -- value is: ";
cout <>
cout <<"End";
vissza 0;
>

Ez a program az alábbi eredményt kivételként a típus nem lesz újra-hvacheno fogási utasítás (dupla i):

kezdet
Belül try blokk
Rendellenes Program megszűnése

Kivételt képezhet generált a funkció hívott a try blokkban. Példaként tekintsük a következő program:

/ * Létrehoz egy kivételt, hogy a funkció kívül try blokk
* /
#include
érvényteleníti XTEST (int teszt)
cout <<"Inside Xtest, test is: " < if (teszt) dobás teszt;
>
int main ()
cout <<"Start\n";
megpróbál cout <<"Inside try block\n";
XTEST (0);
XTEST (1);
XTEST (2);
>
catch (int i) cout <<"Caught an exception -- value is: ";
cout <>
cout <<"End";
vissza 0;
>

Ez a program a következő eredménnyel:

kezdet
Belül try blokk
Belül XTEST, teszt: 0
Belül XTEST, teszt: 1
Caught kivétel - érték: 1
vég

A try blokk lokalizálható egy bizonyos funkciót. Ebben az esetben minden alkalommal, amikor belép a funkció kezdődik kivételkezelés. Példaként tekintsük a pro-gram:

#include
// try / catch függvénye lehet a külső main ()
érvényteleníti Xhandler (int teszt)
próbálja meg, ha (teszt) dobás teszt;
>
catch (int i) cout <<"Caught Exception #: " <>
>
int main ()
cout <<"Start\n";
Xhandler (1);
Xhandler (2);
Xhandler (0);
Xhandler (3);
cout <<"End";
vissza 0;
>

Ez a program megjeleníti a következő szöveg lép:

kezdet
Caught Kivétel # 1
Caught Kivétel # 2
Caught Kivétel # 3
vég

Mint látható, ez generált három kivétellel. Minden függvény egy kivétel-Lenie tanácsok a fő funkciója. Minden új funkció hívás visszatér kivételkezelés.

Fontos megérteni, hogy a társított kód fogási nyilatkozatot kell végrehajtani csak akkor fogott egy kivétel. Ellenkező esetben a program csak a tapéta, gyermek elkapni nyilatkozatot.




Kapcsolódó cikkek