Udostępnij za pośrednictwem


/Eh (Model obsługi wyjątków)

Określa model obsługi wyjątków do stosowanej przez kompilator i niszczy obiekty C++, które będą wykraczają poza zakresem z wyjątkiem.Jeśli /EH nie jest określony, kompilator będzie przechwytywać strukturalne i wyjątki C++, ale nie niszczy obiekty C++, które będą wykraczają poza zakresem z wyjątkiem.

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

Argumenty

  • a
    Obsługa wyjątków model tego połowów asynchronicznych (struktura) i synchronicznych wyjątki (C++).

  • s
    Model obsługi wyjątków, który przechwytuje tylko wyjątki C++ i nakazuje kompilatorowi zakładać, że extern funkcje C Zgłoś wyjątek.

  • c
    Jeśli używany z s (/EHsc), połowy tylko wyjątki C++ i nakazuje kompilatorowi zakładać, że extern funkcje c throw nigdy nie wyjątek C++./EHcajest równoważne z /EHa.

Uwagi

Użyj /EHs określić synchroniczne wyjątek obsługi modelu (obsługa bez strukturalnej obsługi wyjątków wyjątków wyjątek C++).Jeśli korzystasz z /EHs, a następnie na catch klauzuli nie będzie przechwytywać wyjątków asynchronicznego.Również wszystkie obiekty w zakresie podczas asynchronicznego wyjątek jest generowany nie zostaną zniszczone, nawet jeśli wyjątek asynchroniczne jest obsługiwane.W obszarze /EHs, catch(...) będzie tylko połowu wyjątków C++.Naruszenie zasad dostępu i System.Exception wyjątki nie zostanie przechwycony.

Użyj /EHa określić asynchronicznych wyjątek obsługi modelu (wyjątek C++ obsługi z strukturalnej obsługi wyjątków wyjątków)./EHamoże skutkować mniej obrazów atomowe, ponieważ kompilator nie będzie optymalizacji try jako agresywnie zablokować nawet, jeśli kompilator nie widać throw.

Użyj /EHa , jeśli chcesz przechwytywać wyjątku, wywoływane z czymś innym niż throw.Poniższy przykładowy wygeneruje wyjątek:

// 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 Opcja wymaga, aby /EHs lub /EHa jest określony.Za pomocą / CLR (kompilacja wspólnej Language Runtime) pociąga za sobą /EHa (/clr /EHa jest zbędne).Kompilator wygeneruje błąd, jeśli /EHs[c] jest używana po /clr.Optymalizacje nie wpłynie to zachowanie.Gdy wyjątek zostanie przechwycony, kompilator wywołuje destruktora klasy lub destruktory dla obiektu lub obiektów, które znajdują się w tym samym zakresie, jako wyjątek.Gdy wyjątek nie jest złowionych, destruktory te nie są uruchamiane.

Zobacz _set_se_translator dla ograniczenia obsługi wyjątków /clr.

Opcja może być odprawiony symbolem -.Na przykład /EHsc- jest interpretowana jako /EHs /EHc- i jest równoważne z /EHs.

Zobacz Synchronous Exception Handling Aby uzyskać więcej informacji.

Aby ustawić tę opcję kompilatora w środowisku projektowym programu Visual Studio

  1. Otwórz projekt Stron właściwości okno dialogowe.Aby uzyskać szczegółowe informacje, zobacz Jak: Otwórz strony właściwości projektu.

  2. Kliknij przycisk C i C++ folder.

  3. Kliknij przycisk Generowanie kodu stronę właściwości.

  4. Modyfikowanie Włączyć wyjątki C++ właściwości.

Ewentualnie można użyć następującej procedury:

Aby ustawić tę opcję kompilatora w środowisku projektowym programu Visual Studio

  1. Kliknij przycisk C i C++ folder.

  2. Kliknij przycisk Generowanie kodu stronę właściwości.

  3. Ustaw Włącz wyjątki C++ do nr.

  4. Kliknij przycisk wiersza polecenia stronę właściwości.

  5. Wpisz opcję kompilatora w Dodatkowe opcje pole.

Aby programowo ustawić tę opcję kompilatora

Zobacz też

Informacje

Opcje kompilatora

Ustawianie opcji kompilatora

Specyfikacje wyjątek