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:
Chráněná část je spuštěna.
Obslužná rutina ukončení je vyvolána.
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říkazemgoto
mimo strážené tělo nebo příkazemreturn
), 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