Aviso do compilador (nível 4) C4571
Informativo: a semântica de captura (...) foi alterado desde Visual C++ 7.1; as exceções estruturados (SEH) são capturadas não
C4571 é gerado para cada bloco de captura (...) a compile com /EHs.
Ao criar com /EHs, um bloco de captura (...) não detectará uma exceção estruturado (divisão por zero, ponteiro nulo, por exemplo); um bloco de captura (...) detectará somente explicitamente- lançadas exceções, C++. Para obter mais informações, consulte Tratamento de exceções no Visual C++.
Esse aviso é desativada por padrão. Defina esse aviso sobre assegurar que quando você compila com /EHs seus blocos de try/catch (...) não pretendam capturar exceções estruturados. Consulte Avisos de compilador desativados por padrão para maiores informações.
Você pode resolver C4571 em uma das seguintes maneiras,
Compile com /EHa se você ainda quiser que seus blocos de try/catch (...) para capturar exceções estruturados.
Não habilite C4571 se você não quiser que seus blocos de try/catch (...) para capturar exceções estruturados, mas ainda quiser usar blocos de try/catch (...). Você ainda pode capturar exceções estruturados usando as palavras-chave estruturados a manipulação de exceções (__try, __except, e __finally). Mas lembre-se de que, quando os destruidores compilados de /EHs serão chamados somente quando a exceção c criando será gerada, não a exceção.
Substitua o bloco de captura (...) com os blocos de try/catch para exceções específicas do C++ e, opcionalmente, adicione manipulação de exceção estruturados em torno de manipulação de exceção C++ (__try, __except, e __finally). Consulte Tratamento de exceções estruturado (C/C++) para maiores informações.
Consulte /EH (modelo de tratamento de exceções) para maiores informações.
Exemplo
O exemplo a seguir produz 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
}