A try-all utasítás
Operator-try-végre:
__próbálja ki a kompozit operátort
A try-finally utasítás egy Microsoft kiterjesztés a C és C ++ nyelvek számára, és lehetővé teszi a célalkalmazások számára, hogy a kódblokk megszakadása esetén végrehajtsa a tisztítási kódot. A tisztítás olyan feladatokat foglal magában, mint a memóriaelosztás megszüntetése, a fájlok lezárása és a leírók felszabadítása. A try-finally utasítás különösen hasznos a szubrutinoknál, amelyek több helyen ellenőrzik a hibákat, amelyek a korai riasztásból erednek.
További információkért és mintakódokért lásd a Try-except utasítást. A strukturált kivételkezelésről általában lásd: Strukturált kivételkezelés. A kezelt alkalmazásokban található kivételek kezelésével kapcsolatos további információkért lásd: Kivételek a / clr.
A strukturált kivételkezelést támogatja a Win32 forráskódok mind C, mind C ++ formátumban. Azonban nem kifejezetten a C + + -hoz készült. Annak érdekében, hogy a kód jobban tolerálható legyen, jobb, ha a C ++ kivételkezelő mechanizmust használjuk. Ráadásul ez a mechanizmus rugalmasabb, mivel bármely típusú kivételt képes kezelni. A C ++ programokban javasoljuk, hogy használja a C ++ kivételkezelő mechanizmust (próbáld meg, fogd be és dobd ki az utasításokat).
Az __try utasítás után a vegyes nyilatkozat védett szakasz. Az __finally mondatot követő összetett mondat a megszüntetéskezelő. Ez a kezelő határozza meg egy sor műveletek a kilépés a védett részén, függetlenül attól, hogy a kimenetet a elimináció (abnormális lezárás) vagy eredményeként a további szabványos átviteli vezérlő (rendes befejezése).
A vezérlés eléri a __try operátort a normál szekvenciális végrehajtás során (további átviteli vezérlés). Ha a vezérlés szerepel a __próbán. a megfelelő kezelő aktívvá válik. Ha az ellenőrzések áramlása eléri a próbatest végét, a végrehajtás a következőképpen folytatódik.
A kilépési kezelő neve.
A kilépési kezelő befejeződése után a végrehajtás a végső utasítás után folytatódik. Nem számít, mennyire biztonságos partícióra befejeződött (például üzemeltető goto kilép a védett szervezet vagy az üzemeltető visszatérés), a felvezető végre befejezése előtt (mielőtt) vezérli a kimeneti áramot a védett részén.
A végső operátor nem blokkolja a megfelelő kivételkezelő keresését.
Ha kivétel történik a __try blokkban. Az operációs rendszernek meg kell találnia a kezelőt a kivételhez, vagy a program nem működik megfelelően. Ha a kezelő megtalálható, akkor az összes végső blokk végrehajtása megtörténik, és a végrehajtás folytatódik a kezelőben.
Tegyük fel például, hogy a függvényhívások sorozata az A függvényt a D függvényhez kapcsolja, ahogy az az alábbi ábrán látható. Minden funkciónak van egy terminációs kezelője. Ha egy kivételt hoz létre a D függvényben, és az A függvény feldolgozására kerül sor, akkor a terminációs kezelõket annak a sorrendnek nevezzük, amelyben a rendszer kiadja a köteget: D, C és B.
A végrehajtás sorrendje
A kipróbálási nyilatkozat viselkedése különbözik a többi olyan nyelvtől, amelyek támogatják a végső klauzula használatát. például C #. Egy __try operátor lehet __finally. vagy __ kivéve. de nem mindkettő. Ha egyszerre mindkettőt egyszerre kell használni, akkor a try-except utasításnak tartalmaznia kell egy belső try-finally utasítást. Az egyes blokkok végrehajtási idejét meghatározó szabályok is eltérőek.
A __leave kulcsszó csak a try-finally utasítás védett szakaszában használható. A végrehajtás a védett rész végéig megy végbe. A végrehajtás folytatódik a megszüntető kezelő első állításával.
A goto utasítás is kiléphet a védett partícióból, de ebben az esetben a teljesítmény csökken, mert a verem felszabadul. Az __leave operátor hatékonyabb, mert nem okozza a köteg felszabadulását.
A kipróbálási utasításnak a longjmp futtató funkcióval való kilépése abnormális megszűnésnek számít. Az __try operátorra való áttérés nem engedélyezett, de mondjuk elhagyni. Minden üzemeltető végül. amelyek aktívak között a kiindulási pont (rendes befejezése __try egység) és végpontja (blokk __except. kezeli a kivételeket) kell kezdeni. Ez a "helyi promóció".
Ha a próba blokk bármely okból idő előtt befejeződik (beleértve a blokkból való kilépést is), akkor a rendszer végül végrehajtja a kapcsolódó blokkot a verem kiadásának részeként. Ezekben az esetekben az AbnormalTermination függvény a TRUE értéket visszaküldi, ha a végső mondattól hívják; egyébként FALSE értéket ad vissza.
Ha a folyamat törlődik a try-finally utasítás végrehajtásakor, akkor a kilépési kezelő nem kerül hívásra.
A blokk befejezése, amely csak a Microsoft rendszerekre vonatkozik