Поделиться через


C6320

Обновлен: Ноябрь 2007

C6320

Предупреждение C6320. Выражение фильтра исключений — константа EXCEPTION_EXECUTE_HANDLER. Это может скрыть исключения, обработка которых не планировалась

Данное предупреждение указывает на побочный эффект использования константы EXCEPTION_EXECUTE_HANDLER в блоке __except. В этом случае оператор блока __except будет всегда выполняться для обработки исключений, включая исключения, которые не требуется обрабатывать с помощью определенной функции. Рекомендуется проверять исключения перед их обработкой.

Пример

В следующем коде создается данное предупреждение, поскольку блок __except пытается обрабатывать исключения всех типов:

#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 ...
   } 
} 

Для устранения этого предупреждения используйте функцию GetExceptionCode для проверки отдельных исключений перед их обработкой, как указано в следующем коде:

#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 ...
   } 
}

См. также

Ссылки

try-except Statement