Sdílet prostřednictvím


Kombinace výjimek v jazyce C (strukturované) a C++

Je-li zapotřebí vytvořit lépe přenositelný kód, není v programu jazyka C++ doporučeno používat zpracování strukturovaných výjimek.Někdy je však potřeba kompilovat pomocí /EHa a tím spojit strukturované výjimky a zdrojový kód jazyka C++, tak jako je někdy třeba zařízení pro manipulaci s oběma druhy výjimek.Protože obslužná rutina strukturované výjimky nemá žádný koncept objektů nebo typových výjimek, nemůže zpracovat výjimky vyvolané z kódu jazyka C++. Nicméně obslužné rutiny jazyka C++ catch typové výjimky zpracovat mohou.Jako taková, není syntaxe pro zpracování výjimek jazyka C++ (try, throw, catch) přijata kompilátorem jazyka C, ale syntaxe zpracování strukturovaných výjimek (__try, __except, __finally) je podporována kompilátorem jazyka C++.

Informace o zpracování strukturovaných výjimek jako výjimek jazyka C++ naleznete v tématu _set_se_translator.

Jsou-li zkombinovány strukturované výjimky a výjimky jazyka C++, je třeba uvědomit si následující:

  1. Výjimky jazyka C++ a strukturované výjimky nelze kombinovat v rámci stejné funkce.

  2. Obslužné rutiny ukončení (bloky __finally) jsou provedeny vždy, i v případě odvíjení po tom, co je vyvolána výjimka.

  3. Zpracování výjimek jazyka C++ může zachytit a zachovat sémantiku odvíjení ve všech modulech zkompilovaných pomocí možnosti kompilátoru /EH (tato možnost povoluje sémantiku odvíjení).

  4. Mohou existovat situace, ve kterých nejsou pro všechny objekty volány funkce destruktoru.Například pokud se strukturovaná výjimka objeví při pokusu provést volání funkce prostřednictvím ukazatele neinicializované funkce, přičemž tato funkce přijímá jako parametry objekty, které byly vytvořeny před voláním, nebudou pro tyto objekty, během odvíjení zásobníku, volány destruktory.

O čem chcete vědět více?

Viz také

Referenční dokumentace

Zpracovávání výjimek v jazyce C++