Compartilhar via


C4571 de aviso (nível 4) do compilador

Informativo: semântica de catch(...) alterada desde o 7.1 do Visual C++; exceções estruturadas (SEH) não são detectadas.

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á apenas catch explicitamente-lançada, exceções do C++. Para obter mais informações, consulte Exception Handling in 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 estruturado. Consulte Compiler Warnings That Are Off by Default 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 estruturado.

  • Não habilite C4571 se não desejar que seus blocos de catch(...) para capturar exceções estruturadas, mas deseja usar blocos de catch(...). Você ainda pode capturar exceções estruturadas, usando 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(...) com os blocos catch para exceções específicas do C++ e, opcionalmente, adicione ao redor de manipulação de exceção de C++ de manipulação de exceção estruturada (__try, __except, e __finally). Consulte Structured Exception Handling (C++) 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
}