Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Microsoft-specifikus
Az try-finally utasítás egy Microsoft-bővítmény a C nyelvhez, amely lehetővé teszi az alkalmazások számára, hogy garantálják a kódblokkok végrehajtásának megszakítása esetén a törlési kód végrehajtását. A törlés olyan feladatokból áll, mint a memória felszabadítása, a fájlok bezárása és a fájlleírók felszabadítása. Ez try-finally az állítás különösen hasznos olyan rutinok esetében, amelyek több helyen ellenőrzik, hogy van-e olyan hiba, amely a rutinból való idő előtti visszatérést okozhatja.
try-finally-statement:
__trycompound-statement__finallycompound-statement
A záradék utáni __try összetett utasítás a védett szakasz. A záradék utáni __finally összetett utasítás a megszüntetési kezelő. A kezelő a védett szakasz kilépésekor végrehajtandó műveletek készletét adja meg. Nem számít, hogy a védett szakasz kivétel (rendellenes leállás) vagy standard módon (normál végződés) lép ki.
A vezérlő egyszerű szekvenciális végrehajtással (áteséssel) ér el egy __try utasítást. Amikor a vezérlő belép az __try utasításba, a társított kezelő aktívvá válik. A végrehajtás a következőképpen folytatódik:
A védett szakasz végrehajtása történik.
A megszüntetési kezelő meghívása történik.
Amikor a megszüntetési kezelő befejeződik, a végrehajtás az
__finallyutasítás után folytatódik. Függetlenül attól, hogy az őrzött szakasz hogyan végződik (például egygotoutasítással a védett testből vagy egyreturnutasításból), a lezáráskezelő végrehajtása még azelőtt történik, hogy a vezérlési folyamat kimozdul a védett szakaszból.
A __leave kulcsszó érvényes egy try-finally utasításblokkon belül. A hatás __leave az, hogy ugrik a végére a try-finally blokk. A megszüntetési kezelő azonnal végrehajtásra kerül. Bár egy goto utasítás használható ugyanahhoz az eredményhez, az goto utasítás a verem kikapcsolását okozza. Az __leave utasítás hatékonyabb, mert nem jár a verem visszatekerésével.
Ha utasítással try-finally vagy futásidejű longjmp függvénnyel lép ki egy return utasításból, az rendellenes leállásnak minősül. Nem legális belevágni egy __try nyilatkozatba, de legális, hogy kiugorjunk az egyikből. Az indulási pont és a cél között aktív összes __finally utasítást futtatni kell. Helyi visszatekerésnek hívják.
A megszüntetési kezelő nem lesz meghívva, ha egy folyamat leáll egy try-finally utasítás végrehajtása közben.
Megjegyzés:
A strukturált kivételkezelés C és C++ forrásfájlokkal működik. Azonban nem kifejezetten C++-ra tervezték. Hordozható C++ programok esetén a C++ kivételkezelést kell használni a strukturált kivételkezelés helyett. Emellett a C++ kivételkezelési mechanizmus sokkal rugalmasabb, mivel bármilyen típusú kivételt képes kezelni. További információ: Kivételkezelés a C++ nyelvi referenciában.
Tekintse meg az utasítás példáját az try-except utasítás működésének megtekintéséhez try-finally .
END Microsoft-specifikus