Sdílet prostřednictvím


Zkuste nakonec prohlášení

Konkrétní společnosti Microsoft

Popisuje následující syntaxe try-finally prohlášení:

__try {
   // guarded code
}
__finally {
   // termination code
}

Gramatika

  • Nakonec příkaz try:
    __try prohlášení sloučenina

    __finally prohlášení sloučenina

try-finally Prohlášení je rozšíření Microsoft jazyky c a C++, který umožňuje aplikacím cíl zaručení provádění kódu vyčištění přerušení provádění bloku kódu.Vyčištění obsahuje úkoly, jako je zrušení přidělení paměti, zavření souborů a uvolnění popisovače souborů.try-finally Příkaz je zvláště užitečný pro rutiny, které mají několik míst, kde je provedena kontrola pro chybu, která by mohla způsobit předčasné vrátit z rutinní.

Ukázka kódu a související informace naleznete v akci-s výjimkou prohlášení.Další informace o zpracování obecně strukturované výjimek, viz Strukturované zpracování výjimek.Další informace o zpracování výjimek v spravovaných aplikací, viz Zpracování výjimek v /clr.

[!POZNÁMKA]

Structured exception zpracování spolupracuje s Win32 pro c a C++ zdrojové soubory.Však ji není navržena speciálně pro C++.Můžete zajistit, že kód je obecnější pomocí zpracování výjimek v C++.Zpracování výjimek v jazyce C++ je také pružnější, v tom, že je schopen zpracovat výjimky libovolného typu.C++ programy, je vhodné použít mechanismus zpracování výjimek C++ (akci, zachytit a vyvoláním prohlášení).

Složený příkaz po __try klauzule je chráněné oblasti.Složený příkaz po __finally klauzule je ukončení rutiny.Obslužná rutina určuje sadu akcí, které jsou spouštěny při ukončen chráněné části, bez ohledu na to, zda je ukončen chráněné části výjimku (abnormálního ukončení) nebo standardní podzim prostřednictvím (normálním ukončení).

Řízení dosáhne __try prohlášení sekvenční provádění jednoduchých (závislý).Při řízení zadá __try, její přidružené popisovač stane aktivní.Tok řízení, dosáhne-li konec bloku try, spuštění se postupuje následovně:

  1. Ukončení zpracování je vyvolána.

  2. Po dokončení zpracování ukončení provádění pokračuje __finally prohlášení.Bez ohledu jak je chráněn konce oddílu (například prostřednictvím goto z chráněné subjektu nebo return prohlášení), provedení ukončení rutiny before tok řízení posune mimo chráněné oblasti.

    A __finally prohlášení neblokuje hledání popisovač příslušné výjimky.

Pokud dojde k výjimce v __try blok, operační systém musí najít obslužnou rutinu pro výjimku nebo program se nezdaří.Pokud ovladač nalezen, veškeré __finally bloky jsou provedeny a pokračuje v provádění v obslužné rutině.

Předpokládejme například, řadu funkce volání odkazy funkce a funkce D, jak ukazuje následující obrázek.Každá funkce má jeden ukončení rutiny.Pokud je aktivována funkce d výjimku a zpracovány v a ukončení rutiny se nazývají v tomto pořadí jako systém unwinds zásobníku: D, C, B.

Pořadí provádění ukončení rutiny

Ukončení pořadí spuštění obslužné rutiny

[!POZNÁMKA]

Chování zkuste nakonec se liší od jiných jazyků, které podporují použití nakonec, jako například C#.Jeden __try může být buď, ale nikoli obojí z __finally a __except.Pokud jsou obě používány společně, vnější akci-s výjimkou prohlášení musí uzavřete vnitřní akci finally.Pravidla určující když provede každý blok se také liší.

Klíčové slovo __leave

__leave Klíčové slovo je platná pouze v rámci chráněné části try-finally prohlášení a jeho vliv je přejít na konec chráněné oblasti.Spuštění pokračuje na první příkaz v ukončení rutiny.

A goto prohlášení můžete také přejít z chráněné oblasti, ale snižuje výkon, protože ji vyvolá příkazem zásobníku.__leave Prohlášení je efektivnější, protože nezpůsobí příkazem zásobníku.

Neobvyklé ukončení

Ukončení try-finally pomocí příkazu longjmp spuštění funkce je považován za neobvyklé ukončení.Je nelegální přejít do __try prohlášení, ale právní přecházet z jednoho.Všechny __finally příkazy, které jsou aktivní mezi místem zahájení (normální ukončení __try bloku) a cíl ( __except blok, který zpracovává výjimka) musí být spuštěn.To se nazývá místní unwind.

Pokud akci bloku předčasně ukončen z jakéhokoli důvodu včetně skok z bloku, systém provede přidružených nakonec bloku jako součást procesu příkazem zásobníku.V takových případech AbnormalTermination funkce vrátí hodnotu PRAVDA, pokud je volána v rámci nakonec blokovat; v opačném případě vrátí hodnotu FALSE.

Pokud proces je usmrcena uprostřed provádění není zavolána ukončení rutiny try-finally prohlášení.

Konec konkrétní společnosti Microsoft

Viz také

Referenční dokumentace

Ukončení zpracování zápisu

Structured Exception zpracování (C++)

Klíčových slov jazyka C++

Termination-Handler Syntax