Sdílet prostřednictvím


try-finally – příkaz (C)

Specifické pro produkty společnosti Microsoft

Příkaz try-finally je rozšíření jazyka C společnosti Microsoft umožňující aplikacím zajistit spuštění kódu pro vyčištění při přerušení provádění bloku kódu.Vyčištění obsahuje úkoly, jako je zrušení přidělení paměti, uzavření souborů a uvolnění popisovačů souborů.Příkaz try-finally je obzvláště užitečný pro rutiny, které mají několik míst, kde je provedena kontrola chyby, která by mohla způsobit předčasné vrácení z této rutiny.

  • příkaz-try-finally:
    __try složený příkaz

    __finally složený-příkaz

Složený příkaz za klauzulí __try je chráněná část.Složený příkaz po klauzuli __finally je obslužnou rutinou ukončení.Obslužná rutina určuje sadu akcí, které jsou provedeny při opuštění chráněné části bez ohledu na to, zda je chráněná část ukončena výjimkou (abnormální ukončení) nebo standardním předáním řízení (normální ukončení).

Řízení dosáhne příkazu __try jednoduchých sekvenčním prováděním (předáním řízení).Když řízení vstoupí do příkazu __try, stanou se jeho přidružené obslužné rutiny aktivní.Spuštění probíhá následujícím způsobem:

  1. Chráněná část je spuštěna.

  2. Je vyvolána rutina ukončení.

  3. Po dokončení obslužné rutiny ukončení provádění pokračuje za příkazem __finally.Bez ohledu na to, jakým způsobem chráněný oddíl skončí (například prostřednictvím příkazu goto nebo příkazu return), je obslužná rutina ukončení spuštěna před tím, než se tok řízení dostane mimo chráněnou oblast.

Klíčové slovo __leave je platné v rámci bloku příkazu try-finally.Úkolem klíčového slova __leave je přejít na konec bloku try-finally.Obslužná rutina ukončení se spustí okamžitě.I když lze příkaz goto použít k dosažení stejného výsledku, příkaz goto způsobí odvíjení zásobníku.Příkaz __leave je efektivnější, protože nezahrnuje odvíjení zásobníku.

Ukončení příkazu try-finally pomocí příkazu return nebo funkce longjmp modulu run-time je považováno za abnormální ukončení.Není povoleno přejít do příkazu __try, ale je možné z takového příkazu vyskočit.Všechny příkazy __finally, které jsou aktivní mezi bodem odeslání a cílem musí být spuštěny.Toto se nazývá „místní odvíjení“.

Obslužná rutina ukončení není zavolána, pokud je proces během provádění příkazu try-finally ukončen.

[!POZNÁMKA]

Strukturované zpracování výjimek funguje pro zdrojové soubory jazyka C i C++.Pro jazyk C++ však není výslovně navržen.Větší přenositelnost kódu lze zajistit použitím zpracování výjimek jazyka C++.Mechanismus zpracování výjimek jazyka C++ je také více flexibilní, jelikož dokáže zpracovat výjimky libovolného typu.

[!POZNÁMKA]

U aplikací jazyka C++ by mělo být místo použití strukturovaného zpracování výjimek použito zpracování výjimek jazyka C++.Další informace naleznete v tématu Zpracování výjimek v Referencích pro jazyk C++.

Chcete-li vidět jak příkaz try-finally funguje, podívejte se na příklad příkazu try-except.

Specifické pro produkty společnosti Microsoft - konec

Viz také

Referenční dokumentace

try-finally – příkaz