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.
La expresión de filtro de excepciones es la constante EXCEPTION_EXECUTE_HANDLER. Esto puede enmascarar excepciones que no estaba previsto que se controlaran.
Comentarios
Esta advertencia indica el efecto secundario del uso EXCEPTION_EXECUTE_HANDLER de constantes en un __except bloque. En este caso, la instrucción del __except bloque siempre se ejecutará para controlar la excepción, incluidas las excepciones que no quería controlar en una función determinada. Se recomienda comprobar la excepción antes de controlarla.
Nombre de análisis de código: EXCEPTIONEXECUTEHANDLER
Ejemplo
El código siguiente genera esta advertencia porque el __except bloque intentará controlar excepciones de todos los tipos:
#include <stdio.h>
#include <excpt.h>
void f(int *p)
{
__try
{
puts("in try");
*p = 13; // might cause access violation exception
// code ...
}
__except(EXCEPTION_EXECUTE_HANDLER) // warning
{
puts("in except");
// code ...
}
}
Para corregir esta advertencia, use GetExceptionCode para comprobar si hay una excepción determinada antes de controlarla, como se muestra en el código siguiente:
#include <stdio.h>
#include <windows.h>
#include <excpt.h>
void f(int *p)
{
__try
{
puts("in try");
*p = 13; // might cause access violation exception
// code ...
}
__except(GetExceptionCode()==EXCEPTION_ACCESS_VIOLATION ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
puts("in except");
// code ...
}
}