Megosztás a következőn keresztül:


try-finally utasítás (C)

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:
__try compound-statement __finally compound-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:

  1. A védett szakasz végrehajtása történik.

  2. A megszüntetési kezelő meghívása történik.

  3. Amikor a megszüntetési kezelő befejeződik, a végrehajtás az __finally utasítás után folytatódik. Függetlenül attól, hogy az őrzött szakasz hogyan végződik (például egy goto utasítással a védett testből vagy egy return utasí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

Lásd még

try-finally utasítás (C++)