Combinação de exceções C (estruturadas) e C++
Se você quiser gravar um código portátil, não recomendamos o uso de tratamento de exceções estruturadas (SEH) em um programa C++. No entanto, às vezes, você pode querer compilar usando /EHa
e combinar exceções estruturadas e código-fonte em C++ e precisar de algum recurso para tratar os dois tipos de exceções. Como um manipulador estruturado de exceções não tem o conceito de objetos ou de exceções de tipo, ele não consegue tratar as exceções lançadas por código C++. No entanto, os manipuladores C++ catch
podem lidar com exceções estruturadas. Por isso, a sintaxe de tratamento de exceção C++ (try
, throw
, catch
) não é aceita pelo compilador C, mas a sintaxe de tratamento de exceções estruturadas (__try
, __except
, __finally
) é suportada pelo compilador C++.
Consulte _set_se_translator
para obter informações sobre o tratamento de exceções estruturadas como exceções C++.
Se você misturar exceções estruturadas e C++, esteja ciente desses possíveis problemas:
As exceções C++ e as exceções estruturadas não podem ser combinadas na mesma função.
Os manipuladores de término (blocos
__finally
) são sempre executados, mesmo durante o desenrolamento depois que uma exceção é lançada.A manipulação de exceção C++ pode capturar e preservar as semânticas de desenrolamento em todos os módulos compilados com as opções de compilador
/EH
, que permite a semântica de desenrolamento.Pode haver algumas situações nas quais as funções de destruidor não sejam chamadas de todos os objetos. Por exemplo, uma exceção estruturada pode ocorrer ao tentar fazer uma chamada de função por meio de um ponteiro de função não inicializado. Se os parâmetros de função forem objetos construídos antes da chamada, os destruidores desses objetos não serão chamados durante o desenrolar da pilha.
Próximas etapas
Usando
setjmp
oulongjmp
em programas C++Veja mais informações sobre o uso de
setjmp
elongjmp
em programas C++.Tratar exceções estruturadas no C++
Veja exemplos das formas de usar o C++ para lidar com exceções estruturadas.
Confira também
Práticas recomendadas do C++ modernas para tratamento de erros e exceções
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de