/EH (modelo de manipulação de exceção)
Especifica o modelo de tratamento de exceção para ser usado pelo compilador e destrói objetos C++ que sairá do escopo como resultado de uma exceção.Se /EH não for especificado, o compilador captura estruturada e exceções do C++, mas não irá destruir objetos C++ que sairá do escopo como resultado de uma exceção.
/EH{s|a}[c][-]
Argumentos
a
A manipulação de exceção do modelo que detectando assíncrono (estruturado) e das exceções síncronas (C++).s
O modelo de manipulação 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 o modelo (sem exceções de manipulação de exceção estruturada de manipulação de exceção C++) de manipulação de exceções síncronas.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(...) será o único problema exceções do C++.Violações de acesso e System.Exception exceções não irão ser interceptadas.
Use /EHa para especificar o modelo (com exceções de manipulação de exceção estruturada de manipulação de exceção C++) de manipulação de exceções assíncronas./EHapode resultar em uma imagem de alto desempenho menor porque o compilador não otimizar um try bloquear tão agressivamente, mesmo que o compilador não vê uma throw.
Use /EHa se você deseja capturar uma exceção gerada 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 um ou mais 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 /clr.
A opção pode ser apagada utilizando o símbolo -.Por exemplo, /EHsc- é interpretado como /EHs /EHc- e é equivalente a /EHs.
Consulte Synchronous Exception Handling para obter mais informações.
Para definir esta opção de compilador no ambiente de desenvolvimento Visual Studio
Abra o projeto Páginas de propriedades caixa de diálogo.Para obter detalhes, consulte:Como: abrir páginas de propriedades do projeto.
Clique no C/C++ pasta.
Clique no Geração de código página de propriedades.
Modificar o Habilitar as exceções do C++ propriedade.
Como alternativa, você pode usar o procedimento a seguir:
Para definir esta opção de compilador no ambiente de desenvolvimento Visual Studio
Clique no C/C++ pasta.
Clique no Geração de código página de propriedades.
Definir Habilitar exceções C++ para não.
Clique no a linha de comando página de propriedades.
Digite a opção de compilador no Opções adicionais de caixa.
Para definir essa opção de compilador programaticamente
- Consulte ExceptionHandling.