Sdílet prostřednictvím


try-finally – příkaz (C)

Specifické pro Microsoft

Tento try-finally příkaz je rozšířením jazyka C od Microsoftu, které aplikacím umožňuje zaručit spuštění kódu čištění při přerušení spuštění bloku kódu. Vyčištění se skládá z úloh, jako je uvolnění paměti, zavření souborů a uvolnění popisovačů souborů. Tento try-finally příkaz je zvlášť užitečný pro rutiny, které mají několik míst, kde se provádí kontrola chyby, která by mohla způsobit předčasné návraty z rutiny.

try-finally-statement:
__try compound-statement __finally compound-statement

Složený příkaz za klauzulí __try je strážený oddíl. Složený příkaz za __finally klauzulí je obslužná rutina ukončení. Obslužná rutina určuje sadu akcí, které se spustí při ukončení strážené části. Nezáleží na tom, jestli je strážený oddíl ukončen výjimkou (abnormální ukončení) nebo standardním ukončením (normální ukončení).

Řízení dosáhne __try příkazu jednoduchým sekvenčním spuštěním (propadne). Když ovládací prvek zadá __try příkaz, jeho přidružená obslužná rutina se aktivuje. Provádění pokračuje následujícím způsobem:

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

  2. Obslužná rutina ukončení je vyvolána.

  3. Po dokončení obslužné rutiny ukončení bude provádění pokračovat po __finally příkazu. Bez ohledu na to, jak strážený oddíl končí (například příkazem goto mimo strážené tělo nebo příkazem return ), obslužná rutina ukončení se spustí před přesunem toku řízení z strážené části.

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

Ukončení try-finally příkazu pomocí return příkazu nebo longjmp funkce za běhu se považuje za neobvyklé ukončení. Není právní skočit do __try prohlášení, ale právní skočit z jednoho. Musí být spuštěny všechny __finally příkazy, které jsou aktivní mezi bodem odletu a cílem. Říká se tomu místní odvíjení.

Obslužná rutina ukončení se nevolá, pokud se proces ukončí při provádění try-finally příkazu.

Poznámka:

Strukturované zpracování výjimek funguje se zdrojovými soubory jazyka C a C++. Není ale speciálně určená pro jazyk C++. V případě přenosných programů C++ by se mělo místo strukturovaného zpracování výjimek používat zpracování výjimek C++. Mechanismus zpracování výjimek jazyka C++ je také mnohem flexibilnější, protože dokáže zpracovat výjimky libovolného typu. Další informace naleznete v tématu Zpracování výjimek v referenční dokumentaci jazyka C++.

Podívejte se na příklad příkazu try-except a podívejte se, jak try-finally příkaz funguje.

END Microsoft-specific

Viz také

try-finally – příkaz (C++)