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