Advertencia del compilador (nivel 4) C4571
Información: la semántica de catch(...) cambió desde Visual C++ 7.1; ya no se detectan excepciones estructuradas (SEH)
La advertencia C4571 se genera para cada bloque catch(...) al compilar con /EHs.
Cuando se compila con /EHs, un bloque catch(...) no detecta una excepción estructurada (por ejemplo, dividir por cero, o un puntero nulo); un bloque catch(...) únicamente detectará excepciones de C++ que se hayan producido explícitamente. Para obtener más información, vea Control de excepciones en Visual C++.
De forma predeterminada, esta advertencia está desactivada. Active esta advertencia para garantizar que cuando se compile con /EHs, los bloques catch(...) no tratarán de detectar excepciones estructuradas. Para obtener más información, vea Advertencias del compilador desactivadas de forma predeterminada.
Para resolver la advertencia C4571, siga uno de estos procedimientos:
Compile con /EHa si todavía desea que los bloques catch(...) detecten excepciones estructuradas.
No habilite C4571 si no quiere que los bloques catch(...) detecten excepciones estructuradas, pero todavía desea utilizar bloques catch(...). Puede detectar las excepciones estructuradas mediante las palabras clave de control de excepciones estructuradas (__try, __except y __finally). Pero recuerde que, después de la compilación, sólo se llamará a los destructores /EHs cuando se produzca una excepción de C++, no cuando se produzca una excepción SEH.
Reemplace el bloque catch(...) por bloques catch para excepciones de C++ específicas y, si lo desea, agregue un control de excepciones estructuradas en torno al control de excepciones de C++ (__try, __except y __finally). Para obtener más información, vea Control de excepciones estructurado (C/C++).
Para obtener más información, vea /EH (Modelo de control de excepciones).
Ejemplo
El ejemplo siguiente genera el error 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
}