/EH (modelo de manipulação de exceção)
Especifica o modelo de tratamento de exceção para ser usado pelo compilador e destrói a objetos de C++ sairá do escopo como resultado de uma exceção. Se /EH não for especificado, o compilador irá capturar estruturada e exceções do C++, mas não irá destruir os objetos de C++ sairá do escopo como resultado de uma exceção.
/EH{s|a}[c][-]
Arguments
a
A manipulação de exceção do modelo que detectando assíncrono (estruturados) e exceções de síncronas (C++).s
O modelo de tratamento de exceção que captura somente exceções de C++ e informa o compilador suponha que extern funções c lançar uma exceção.c
Se usado com s (/EHsc), captura somente exceções de C++ e informa o compilador suponha que extern funções c nunca lançam uma exceção de C++. /EHcaé equivalente a /EHa.
Comentários
Use /EHs para especificar a modelo (sem exceções de manipulação de exceção estruturada de manipulação de exceção C++) de manipulação de exceção síncrona. Se você usar /EHs, o catch cláusula não irá capturar exceções assíncronas. Além disso, todos os objetos no escopo quando a exceção assíncrona for gerada não serão destruídos, mesmo se a exceção assíncrona é tratada. Em /EHs, catch(...) só irá capturar exceções do C++. Violações de acesso e System.Exception exceções não irão ser interceptadas.
Use /EHa para especificar a modelo (exceção de C++ tratamento de exceções de manipulação de exceção estruturada) de manipulação de exceções assíncronas. /EHapode resultar em uma imagem de menos de alto desempenho, porque o compilador não irá otimizar um try Bloquear como agressivamente, mesmo que o compilador não vê throw.
Use /EHa se você deseja capturar uma exceção com algo diferente de um throw. O exemplo a seguir irá gerar uma exceção:
// 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;
}
}
O /EHc opção requer que /EHs ou /EHa é especificado. Usando /CLR (common Language Runtime Compilation) implica /EHa (/clr /EHa é redundante). O compilador gerará um erro se /EHs[c] é usada após /clr. Otimizações não afetará esse comportamento. Quando uma exceção é detectada, o compilador invocará o destruidor de classe ou destruidores para o objeto ou objetos que estão no mesmo escopo como a exceção. Quando uma exceção não é detectada, esses destruidores não são executados.
Consulte _set_se_translator para restrições de manipulação de exceção em /clr.
A opção pode ser apagada utilizando o símbolo -. Por exemplo, /EHsc- é interpretado como /EHs /EHc- e é equivalente a /EHs.
See Exception Handling: Default Synchronous Exception Model for more information.
Para definir esta opção de compilador no ambiente de desenvolvimento Visual Studio
Abra o projeto Property Pages caixa de diálogo. For details, see Como: Abrir páginas de propriedades do projeto.
Clique o C/C++ pasta.
Clique na A geração de código página de propriedades.
Modificar o Habilitar exceções do C++ propriedade.
Como alternativa, você pode usar o seguinte procedimento:
Para definir esta opção de compilador no ambiente de desenvolvimento Visual Studio
Clique o C/C++ pasta.
Clique na A geração de código página de propriedades.
Definir Habilitar exceções C++ para não.
Clique na a linha de comando página de propriedades.
Digite a opção de compilador no Opções adicionais de caixa.
Para definir esta opção de compilador programaticamente
- See ExceptionHandling.