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:
Chráněná část je spuštěna.
Je vyvolána obslužná rutina ukončení.
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říkazemgoto
mimo strážené tělo nebo prostřednictvímreturn
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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro