/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
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.
Kliknij przycisk C i C++ folder.
Kliknij przycisk Generowanie kodu stronę właściwości.
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
Kliknij przycisk C i C++ folder.
Kliknij przycisk Generowanie kodu stronę właściwości.
Ustaw Włącz wyjątki C++ do nr.
Kliknij przycisk wiersza polecenia stronę właściwości.
Wpisz opcję kompilatora w Dodatkowe opcje pole.
Aby programowo ustawić tę opcję kompilatora
- See ExceptionHandling.