Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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
/EHase você ainda quiser que seuscatch(...)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 usarcatch(...)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,__excepte__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
}