Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Actualización: noviembre 2007
Mensaje de error
Información: la semántica de catch(...) cambió desde Visual C++ 7.1; ya no se detectan excepciones estructuradas (SEH)
Informational: catch(...) semantics changed since Visual C++ 7.1; structured exceptions (SEH) are no longer caught
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(...) sólo detectará excepciones de C++ que se hayan producido explícitamente. Para obtener más información, vea Exception Handling in Visual C++.
De forma predeterminada, esta advertencia está desactivada. Active esta advertencia para garantizar que cuando compile con /EHs, los bloques catch(...) no tratarán de detectar excepciones estructuradas. Vea Compiler Warnings That Are Off by Default para obtener más información.
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). Vea Structured Exception Handling (C++) para obtener más información.
Vea /EH (Modelo de control de excepciones) para obtener más información.
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
}