/EH (Model zpracování výjimek)

Určuje model používaný kompilátor zpracování výjimek a ničí C++ objekty, které se dostanou mimo rozsah této výjimky.Pokud /EH není zadána, kompilátor zachytí strukturovaných a C++ výjimky, ale nebude zničit C++ objekty, které se dostanou mimo rozsah této výjimky.

/EH{s|a}[c][-]

Arguments

  • a
    Model zpracování výjimek, že úlovky asynchronní (strukturu) a synchronní výjimky (C++).

  • s
    Model zpracování výjimek, který zachycuje pouze výjimky C++ a říká kompilátoru předpokládat, extern c funkce vyvoláním výjimky.

  • c
    Pokud s s (/EHsc), úlovky výjimky z jazyka C++ a předpokládá, že kompilátoru sděluje, extern c funkce nikdy vyvoláním výjimky C++./EHcaje ekvivalentní /EHa.

Poznámky

Použití /EHs určit výjimky synchronní zpracování modelu (zpracování bez structured exception zpracování výjimek C++ výjimek).Používáte-li /EHs, bude catch klauzule nezachytí asynchronní výjimky.Také všechny objekty v oboru při generování asynchronní výjimka nebude ani v případě, že je asynchronní výjimka zpracována.Pod /EHs, catch(...) bude pouze úlovku C++ výjimky.Narušení přístupu a System.Exception není vzniká výjimky.

Použití /EHa zadat výjimku asynchronní zpracování modelu (manipulace s structured exception zpracování výjimek C++ výjimka)./EHaprotože není optimalizuje kompilátor může způsobit méně performant obraz try jako agresivně zablokovat i v případě, že kompilátor nezobrazí throw umístěn.

Použití /EHa Pokud chcete zachytit výjimku aktivovaná s něco než throw.Následující ukázka vygeneruje výjimku:

// compiler_options_EHA.cpp
// compile with: /EHa
#include <iostream>
#include <excpt.h>
using namespace std;

void fail() {   // generates SE and attempts to catch it using catch(...)
   try {
      int i = 0, j = 1;
      j /= i;   // This will throw a SE (divide by zero).
      printf("%d", j); 
   }
   catch(...) {   // catch block will only be executed under /EHa
      cout<<"Caught an exception in catch(...)."<<endl;
   }
}

int main() {
   __try {
      fail(); 
   }

   // __except will only catch an exception here
   __except(EXCEPTION_EXECUTE_HANDLER) {   
   // if the exception was not caught by the catch(...) inside fail()
      cout << "An exception was caught in __except." << endl;
   }
}

/EHc Možnost vyžaduje, aby /EHs nebo /EHa je určena.Pomocí /CLR (kompilace společné Language Runtime) znamená /EHa (/clr /EHa je nadbytečná).Kompilátor vygeneruje chybu, pokud /EHs[c] se používá po /clr.Optimalizace toto chování neovlivní.Když je výjimka zachycena, vyvolává kompilátor destruktoru třídy nebo destruktory pro objekt nebo objekty, které jsou ve stejném oboru jako výjimku.Pokud není výjimka zachycena, ty destruktory spustit.

Viz _set_se_translator pro omezení za zpracování výjimek /clr.

Symbol může být vymazán možnost -.Například /EHsc- je interpretován jako /EHs /EHc- a je ekvivalentní /EHs.

Další informace naleznete v tématu Synchronous Exception Handling.

Chcete-li nastavit tuto možnost kompilátoru ve vývojovém prostředí Visual Studio

  1. Otevřete dialogové okno projektu Stránky vlastností.Další informace naleznete v tématu Jak: otevření stránky vlastností projektu.

  2. Klepněte C/C++ složky.

  3. Klepněte Generování kódu stránky vlastností.

  4. Změnit Povolit výjimky C++ vlastnost.

Alternativně můžete použít následující postup:

Chcete-li nastavit tuto možnost kompilátoru ve vývojovém prostředí Visual Studio

  1. Klepněte C/C++ složky.

  2. Klepněte Generování kódu stránky vlastností.

  3. Nastavit Povolit výjimky C++ na Č.

  4. Klepněte příkazového řádku stránky vlastností.

  5. Možnosti kompilátoru v typu Další možnosti pole.

Programově nastavit tuto volbu kompilátoru

Viz také

Referenční dokumentace

Možnosti kompilátoru

Možnosti nastavení kompilátoru

Specifikace výjimky