Share 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 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

  1. Abra o projeto Property Pages caixa de diálogo. For details, see Como: Abrir páginas de propriedades do projeto.

  2. Clique o C/C++ pasta.

  3. Clique na A geração de código página de propriedades.

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

  1. Clique o C/C++ pasta.

  2. Clique na A geração de código página de propriedades.

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

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

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

Para definir esta opção de compilador programaticamente

Consulte também

Referência

Opções do compilador

Definindo opções do compilador

Exception Specifications