Sdílet prostřednictvím


Zkuste-s výjimkou prohlášení (C)

Konkrétní společnosti Microsoft

Akci-s výjimkou prohlášení je Microsoft rozšíření jazyka c umožňuje získat řízení programu události, které obvykle ukončit spuštění aplikace.Tyto události se nazývají výjimky a mechanismus, který se zabývá výjimky se nazývá structured exception handling.

Výjimky mohou být buď hardware nebo software systémem.I když aplikace nelze obnovit úplně z výjimky hardwaru nebo softwaru, structured exception handling umožňuje zobrazit informace o chybě a soutisk vnitřního stavu aplikace, diagnostikovat problém.To je užitečné pro občasné problémy, které nelze snadno reprodukovat.

Syntaxe

  • s výjimkou příkaz try:
    __try sloučenina prohlášení

    __except ( výraz ) sloučenina prohlášení

Složený příkaz po __try klauzule je chráněné oblasti.Složený příkaz po __except klauzule je zpracování výjimek.Obslužná rutina určuje sadu akcí, které mají být přijata, pokud se během provádění chráněné části je vyvolána výjimka.Spuštění postupuje následovně:

  1. Chráněné části proveden.

  2. Žádná výjimka dojde-li během provádění části chráněné, pokračuje na příkazu po zpracování __except klauzule.

  3. Pokud dojde k výjimce při provádění části chráněné nebo všechny rutinní volá chráněné oblasti,__except výraz vyhodnocen a vrácená hodnota určuje způsob zpracování výjimku.Existují tři hodnoty:

    EXCEPTION_CONTINUE_SEARCHVýjimka není rozpoznán.Pokračovat v hledání až zásobníku pro obsluhu, nejprve obsahující akci-s výjimkou příkazy, pak s nejvyšší prioritou další obsluhy.

    EXCEPTION_CONTINUE_EXECUTIONVýjimkou je rozpoznána, ale odvoláváni.Provádění pokračujte v místě, kde došlo k výjimce.

    EXCEPTION_EXECUTE_HANDLERVýjimkou je rozpoznán.Převod řízení do zpracování výjimek provedením __except složený příkaz a potom pokračovat v provádění bodu došlo k výjimce.

Protože __except výraz vyhodnocen jako výraz C, je omezen na jednu hodnotu, podmíněný výraz operátor nebo operátor čárka.Pokud je požadováno rozsáhlejší zpracování, můžete výraz volání rutiny, která vrací jednu ze tří hodnot uvedených výše.

[!POZNÁMKA]

Structured exception handling pracuje s c a C++ zdrojové soubory.Však ji není navržena speciálně pro C++.Můžete zajistit, že kód je obecnější pomocí zpracování výjimek v C++.Zpracování mechanismus C++ výjimek je také mnohem flexibilnější a v tom, že je schopen zpracovat výjimky libovolného typu.

[!POZNÁMKA]

Pro C++ programy C++ zpracování výjimek měla použít místo structured exception handling.Další informace naleznete v tématu Zpracování výjimek v C++ jazyková Reference.

Každý rutiny aplikace může mít vlastní zpracování výjimek.__except Provede výrazů v oboru __try subjektu.To znamená, že má přístup lokální proměnné, které není deklarován.

__leave Klíčové slovo je platný v rámci akci-s výjimkou bloku.Efekt __leave je přejít na konec akci-s výjimkou bloku.Spuštění obnoví po ukončení zpracování výjimek.Přestože goto příkaz lze použít k dosažení stejného výsledku goto způsobí výpis zásobníku příkazem.__leave Prohlášení je efektivnější, protože nezahrnuje příkazem zásobníku.

Ukončení akci-s výjimkou pomocí příkazu longjmp spuštění funkce je považován za neobvyklé ukončení.Je nelegální přejít do __try prohlášení, ale právní přecházet z jednoho.Nebyla volána popisovač výjimky, pokud je proces usmrcena uprostřed provádění akci-s výjimkou prohlášení.

Příklad

Následuje příklad popisovač výjimky a ukončení rutiny.Viz příkazu try nakonec Další informace o ukončení rutiny.

.
.
.
puts("hello");
__try{
   puts("in try");
   __try{
      puts("in try");
      RAISE_AN_EXCEPTION();
   }__finally{
      puts("in finally");
   }
}__except( puts("in filter"), EXCEPTION_EXECUTE_HANDLER ){
   puts("in except");
}
puts("world");

Toto je výstup z příkladu komentář přidán na pravé straně:

hello
in try              /* fall into try                     */
in try              /* fall into nested try                */
in filter           /* execute filter; returns 1 so accept  */
in finally          /* unwind nested finally                */
in except           /* transfer control to selected handler */
world               /* flow out of handler                  */

Konec konkrétní společnosti Microsoft

Viz také

Referenční dokumentace

Zkuste-s výjimkou prohlášení