try-finally – příkaz (C)

specifické pro společnost Microsoft

Příkaz try-finally je rozšíření jazyka C od Microsoftu, které umožňuje aplikacím zaručit provádění kódu čištění při přerušení provádění bloku kódu. Vyčištění se skládá z takových úloh, jako je uvolnění paměti, zavření souborů a uvolnění popisovačů souborů. Příkaz try-finally 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 klauzulí __finally 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 příkazu __try jednoduchým sekvenčním spuštěním (fall through). Když ovládací prvek vstoupí do __try příkazu, jeho přidružená obslužná rutina se aktivuje. Provádění probíhá takto:

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

  2. Je vyvolána obslužná rutina ukončení.

  3. Po dokončení obslužné rutiny ukončení bude provádění pokračovat za příkazem __finally . Bez ohledu na to, jak strážený oddíl končí (například příkazem goto mimo strážené tělo nebo prostřednictvím return příkazu), obslužná rutina ukončení se spustí předtím, než se tok řízení přesune mimo strážený oddíl.

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

try-finally Ukončení příkazu pomocí return příkazu nebo longjmp funkce run-time se považuje za neobvyklé ukončení. Není legální skočit do výroku __try , ale je legální vyskočit z jednoho. Musí být spuštěny všechny __finally příkazy, které jsou aktivní mezi výchozím a cílovým místem. Říká se tomu místní odpojení.

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 C a C++. Není ale speciálně navržený pro C++. U přenosných programů C++ by se místo strukturovaného zpracování výjimek mělo používat zpracování výjimek jazyka C++. Mechanismus zpracování výjimek jazyka C++ je také mnohem flexibilnější, protože dokáže zpracovávat výjimky libovolného typu. Další informace najdete v tématu Zpracování výjimek v referenční dokumentaci jazyka C++.

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

KONEC specifického pro Microsoft

Viz také

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