C4571 de aviso (nível 4) do compilador
Informativo: semântica catch(...) mudou desde o Visual C++ 7.1; exceções estruturadas (SEH) não são mais capturadas
C4571 é gerado para cada bloco de catch(...) durante a compilação com /EHs.
Durante a compilação com /EHs, um bloco de catch(...) não irá capturar uma exceção estruturada (divisão por zero, o ponteiro nulo, por exemplo); um catch(...) bloco será único problema explicitamente-lançada, exceções do C++.Para obter mais informações, consulte Tratamento de exceção no Visual C++.
Este aviso está desativado por padrão.Ativar este aviso para garantir que, quando você compilar com /EHs seus blocos catch (...) não pretendem capturar exceções estruturadas.Consulte Avisos do compilador são desativados por padrão para obter mais informações.
Você pode resolver C4571 em uma das seguintes maneiras,
Compilar com /EHa se você ainda deseja seus blocos de catch(...) para capturar exceções estruturadas.
Não habilite C4571 se você não quiser que seus blocos de catch(...) para capturar exceções estruturadas, mas deseja continuar a usar blocos de catch(...).Você ainda pode capturar exceções estruturadas, usando a palavras-chave de manipulação de exceção estruturada (__try, __except, e __finally).Mas lembre-se, quando compilado /EHs destruidores só serão chamados quando uma exceção de C++ é lançada, não quando ocorre uma exceção SEH.
Substitua o bloco de catch(...) por blocos catch para exceções específicas do C++ e opcionalmente, adicione ao redor a manipulação de exceção de C++ de manipulação de exceção estruturada (__try, __except, e __finally).Consulte (C++) de manipulação de exceção estruturada para obter mais informações.
Consulte /EH (modelo de manipulação de exceção) para obter mais informações.
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
}