Compartilhar via


/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

  1. Abra o projeto Páginas de propriedades caixa de diálogo.Para obter detalhes, consulte:Como: abrir páginas de propriedades do projeto.

  2. Clique no C/C++ pasta.

  3. Clique no Geração de código página de propriedades.

  4. 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

  1. Clique no C/C++ pasta.

  2. Clique no Geração de código página de propriedades.

  3. Definir Habilitar exceções C++ para não.

  4. Clique no a linha de comando página de propriedades.

  5. Digite a opção de compilador no Opções adicionais de caixa.

Para definir essa opção de compilador programaticamente

Consulte também

Referência

Opções do compilador

Configurando opções de compilador

Especificações de exceção