C6320
Actualización: noviembre 2007
C6320
Advertencia C6320: La expresión de filtro de excepciones es la constante EXCEPTION_EXECUTE_HANDLER. Esto puede enmascarar excepciones que no se esperaba que se controlaran
Esta advertencia indica el efecto secundario de utilizar la constante EXCEPTION_EXECUTE_HANDLER en el bloque __except. En este caso, la instrucción del bloque __except siempre se ejecutará y controlará la excepción, incluidas las excepciones que no desee controlar de una función determinada. Se recomienda comprobar la excepción antes de controlarla.
Ejemplo
El código siguiente genera esta advertencia porque el bloque __except intentará controlar las 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 con el fin de efectuar la comprobación de 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 ...
}
}