C6320
aviso C6320: expressão de filtro de exceção é a constante EXCEPTION_EXECUTE_HANDLER.Isso poderá mascarar exceções que não foram criadas para ser manipulado.
Este aviso indica que o efeito colateral de usar a constante EXCEPTION_EXECUTE_HANDLER no __except do bloco.Nesse caso, a instrução em que o __except bloquear será sempre executado para tratar a exceção, inclusive as exceções não quis tratar em uma função específica.É recomendável que você verifique a exceção antes de manuseá-lo.
Exemplo
O código a seguir gera este aviso porque o __except bloquear irá tentar manipular exceções de todos os 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 corrigir esse aviso, use GetExceptionCode para verificar se há uma exceção específica antes de manuseá-lo, conforme mostrado no código a seguir:
#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 ...
}
}