Partilhar via


Aviso do compilador (nível 4) C4571

Nota informativa: catch(...) semântica alterada desde o Visual C++ 7.1; exceções estruturadas (SEH) já não são interceptadas

Observações

C4571 é gerado para cada catch(...) bloco quando você especifica a opção do /EHs compilador.

Quando especifica a opção do compilador /EHs, os blocos catch(...) não capturam exceções estruturadas. (Divisão por zero ou exceções de ponteiro nulo, por exemplo.) Um bloco catch(...) captura apenas exceções C++ lançadas explicitamente. Para obter mais informações, consulte Tratamento de exceções.

Este aviso está desativado por padrão. Ative este aviso para garantir que, ao compilar com /EHs, os seus blocos catch (...) não capturem exceções estruturadas. Para obter mais informações, consulte Avisos do compilador que estão desativados por padrão.

Você pode resolver C4571 de uma das seguintes maneiras:

  • Compile com /EHa se você ainda quiser que seus catch(...) blocos capturem exceções estruturadas.

  • Não habilite o C4571 se você não quiser que seus catch(...) blocos capturem exceções estruturadas, mas ainda quiser usar catch(...) blocos. Você ainda pode capturar exceções estruturadas usando as palavras-chave de manipulação de exceções estruturadas (__try, __excepte __finally). Mas lembre-se, quando compilados usando /EHs, os destruidores só são chamados quando uma exceção C++ é lançada, não quando uma exceção SEH ocorre.

  • Substitua catch(...) blocos por blocos catch para exceções C++ específicas e, opcionalmente, adicione tratamento de exceção estruturado em torno do tratamento de exceções C++ (__try, __except e __finally). para obter mais informações, consulte Tratamento estruturado de exceções (C/C++) e /EH (Modelo de tratamento de exceções).

Example

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
}