Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Informativo: semântica
catch(...)mudou desde o Visual C++ 7.1; exceções estruturadas (SEH) não são mais capturadas
Comentários
C4571 é gerado para cada bloco catch(...) quando você especifica a opção do compilador /EHs.
Quando você especifica a opção do compilador /EHs, os blocos catch(...) não capturam exceções estruturadas. (Exceções de divisão por zero ou de ponteiro nulo, por exemplo.) Um bloco catch(...) captura apenas exceções C++ lançadas explicitamente. Para saber mais, veja Tratamento de exceção.
Esse aviso está desativado por padrão. Ative esse aviso para garantir que quando você compilar com /EHs, os blocos catch (...) não capturem exceções estruturadas. Para obter mais informações, confira Avisos do compilador desativados por padrão.
É possível resolver o erro C4571 de uma maneiras a seguir:
Compile com
/EHase você ainda quiser que os blocoscatch(...)capturem exceções estruturadas.Não habilite C4571 se você não quiser que os blocos
catch(...)capturem exceções estruturadas, mas ainda quiser usar blocoscatch(...). Você ainda pode capturar exceções estruturadas usando as palavras-chave de tratamento de exceções estruturadas (__try,__excepte__finally). Mas lembre-se, quando compilados usando/EHs, os destruidores só serão chamados quando uma exceção C++ for lançada, não quando ocorrer uma exceção SEH.Substitua os blocos
catch(...)por blocos de captura para exceções específicas de C++ e, opcionalmente, adicione tratamento de exceção estruturada ao redor do tratamento de exceção C++ (__try,__excepte__finally). para obter mais informações, consulte Tratamento de Exceção Estruturada (C/C++) e/EH(Modelo de Tratamento de Exceção).
Exemplo
O exemplo a seguir gera C4571.
// C4571.cpp
// compile with: /EHs /W4 /c
#pragma warning(default : 4571)
int main() {
try {
int i = 0, j = 1;
j /= i; // this will throw a SE (divide by zero)
}
catch(...) {} // C4571 warning
}