Compartilhar via


C6310

Aviso C6310: constante ilegal no filtro de exceção pode causar um comportamento inesperado

Esta mensagem indica que uma constante inválida foi detectada na expressão do filtro de um manipulador de exceção estruturada. Constantes definidas para uso na expressão do filtro de um manipulador de exceção estruturada são:

  • EXCEPTION_CONTINUE_EXECUTION

  • EXCEPTION_CONTINUE_SEARCH

  • EXCEPTION_EXECUTE_HANDLER

Esses valores são definidos no excpt.h de arquivo de cabeçalho de tempo de execução.

Utilizando uma constante que não esteja na lista anterior pode causar um comportamento inesperado.

Exemplo

O código a seguir gera este aviso:

#include <excpt.h>
#include <stdio.h>
#include <windows.h>

BOOL LimitExceeded();

void fd( )
{
  __try 
  {
    if (LimitExceeded()) 
    {
      RaiseException(EXCEPTION_ACCESS_VIOLATION,0,0,0);
    }
    else
    {
      // code 
    }
  } 
  __except (EXCEPTION_ACCESS_VIOLATION)
  {
    puts("Exception Occurred");
  }
}

Para corrigir esse aviso, use o seguinte código:

#include <excpt.h>
#include <stdio.h>
#include <windows.h>

BOOL LimitExceeded();

void fd( )
{
  __try 
  {
    if (LimitExceeded()) 
    {
      RaiseException(EXCEPTION_ACCESS_VIOLATION,0,0,0);
    }
    else
    {
      // code 
    }
  } 
  __except (GetExceptionCode()==EXCEPTION_ACCESS_VIOLATION ? 
               EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
  {
    puts("Exception Occurred");
  }
}