Compartilhar via


Tratamento de exceções no Visual C++

Uma exceção é uma condição de erro, possivelmente fora do controle do programa, que impede que o programa continue sua execução normal. Determinadas operações, incluindo a criação do objetos, a entrada/saída de arquivos e as chamadas de função feitas de outros módulos, são todas possíveis fontes de exceções até mesmo quando seu programa é executado corretamente. O código robusto antecipar e trata exceções.

Para detectar erros lógicos dentro de um único programa ou módulo, use asserções em vez de exceções (consulte Usando asserções).

O Visual C++ dá suporte a três tipos de tratamento de exceções:

  • Tratamento de exceções em C++

    Para a maioria dos programas em C++, você deve usar o tratamento de exceções do C++, que é fortemente tipado e assegura que os destruidores de objeto sejam chamados durante o desenrolamento de pilha.

  • Tratamento de exceções estruturado

    O Windows fornece seu próprio mecanismo de exceção, chamado SEH. Ele não é recomendável para a programação em C++ ou MFC. Use o SEH apenas em programas que não sejam em MFC ou C.

  • Exceções do MFC:

    A partir da versão 3.0, o MFC usa as exceções do C++, mas ainda dá suporte a macros de tratamento de exceções antigas, que têm formato semelhante ao das exceções do C++. Embora essas macros não sejam recomendadas para novos programas, ainda há suporte a elas para garantir a compatibilidade com versões anteriores. Em programas que já usam as macros, você também pode usar livremente as exceções do C++. Durante o pré-processamento, as macros são avaliadas como as palavras-chave de tratamento de exceções definidas na implementação do Visual C++ da linguagem C++ a partir da versão 2.0 do Visual C++. Você pode manter as macros de exceção existentes em vigor quando você começar a usar exceções do C++.

Use a opção de compilador /EH para especificar o tipo de tratamento de exceções a ser usado em um projeto; o tratamento de exceções do C++ é o padrão. Não combine os mecanismos de tratamento de erro, por exemplo, não use exceções do C++ com manipulação de exceções estruturada. Usar manipulação de exceções C++ torna seu código mais portável e permite que você manipule exceções de qualquer tipo. Para obter mais informações sobre as desvantagens da manipulação de exceções estruturada, consulte Manipulação de exceções estruturada. Para obter orientações sobre a combinação de macros do MFC e exceções do C++, consulte Exceções: usando macros MFC e exceções do C++.

Para obter informações sobre o tratamento de exceções em aplicativos do CLR, consulte Em /clr de manipulação de exceção.

Para obter informações sobre o tratamento de exceções em processadores x64, consulte Exceção manipulação (64).

Consulte também

Outros recursos

Referência de linguagem C++