Partilhar via


/EH (exceção tratamento Model)

Especifica o modelo de manipulação de exceções a serem usados pelo compilador e destrói objetos C++ que sairá do escopo sistema autônomo um resultado de exceção.If /EH não é especificado, o compilador irá capturar estruturada e exceções do C++, mas não irá destruir objetos C++ que sairá do escopo da exceção.

/EH{s|a}[c][-]

Argumentos

  • a
    A manipulação de exceção modelar que detecta assíncrono (estruturadas) e síncronas exceções (C++).

  • s
    O modelo de manipulação de exceções que captura somente exceções C++ e informa ao compilador suponha que extern Funções c lançar uma exceção.

  • c
    Se usado com s (/EHsc), captura somente exceções C++ e informa ao 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 de manipulação de exceção síncrono (sem exceções de manipulação de exceção estruturada de manipulação de exceção C++). Se você usar /EHs, e seu catch cláusula não irá capturar exceções assíncrono. Além disso, na Visual C++ 2005, todos os objetos no escopo quando a exceção assíncrono for gerada não serão destruídos, mesmo que a exceção assíncrono é 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 detectadas.

Use /EHa Para especificar o modelo de manipulação de exceções assíncrono (exceção de C++ lidar com exceções de manipulação de exceção estruturada). /EHa pode resultar em uma imagem de alto desempenho menor porque o compilador não irá otimizar um try Bloquear sistema autônomo agressivamente, mesmo se 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;
   }
}

The /EHc opção requer que /EHs ou /EHa foi especificado. Usando /CLR (Common linguagem tempo de execução compilação) 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 chama o destruidor de classe ou destruidores para o objeto ou objetos que estão no mesmo escopo sistema autônomo a exceção.Quando uma exceção não é detectada, os destruidores não são executadas.

See _set_se_translator para restrições na manipulação de exceção /clr.

A opção pode ser apagada utilizando o símbolo -. Por exemplo, /EHsc- é interpretado sistema autônomo /EHs /EHc- e é equivalente a /EHs.

Consulte Manipulação Exceção: Padrão Synchronous Exceção Model para obter mais informações.

Para conjunto esta opção do compilador no ambiente de desenvolvimento do Visual Studio

  1. em aberto propriedade Páginas caixa de diálogo.Para obter detalhes, consulte:Como: Abrir o Projeto Propriedade Páginas.

  2. clicar no C/C++ pasta.

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

  4. Modificar o **Habilitar exceções C++**propriedade .

Como alternativa, você pode usar o procedimento a seguir:

Para conjunto esta opção do compilador no ambiente de desenvolvimento do Visual Studio

  1. clicar no C/C++ pasta.

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

  3. conjunto Habilitar exceções C++ to Não.

  4. clicar no Linha de comando página de propriedades.

  5. Digite opção do compilador no Opções adicionais box.

Para conjunto esta opção do compilador por meio de programação

Consulte também

Referência

Opções do compilador

Opções de compilador configuração

Specifications Exceção

Date

History

Motivo

Julho de 2008

Revisado a descrição de como a /EHa opção pode produzir uma imagem diminuiu o desempenho. Adicionada uma demonstrativo final no try Bloco de amostra para evitar uma otimização indesejada.

Aprimoramento de informações.