Compartilhar via


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
}