C6320
Ostrzeżenie C6320: wyrażenie filtru wyjątków jest stała wartość EXCEPTION_EXECUTE_HANDLER.To może maskować wyjątki, które nie były przeznaczone do obsługi
To ostrzeżenie wskazuje efektem ubocznym przy użyciu stałej EXCEPTION_EXECUTE_HANDLER w bloku __except.W przypadku instrukcji w __except zablokować będzie zawsze wykonać obsłużyć wyjątek, w tym wyjątków nie chcesz obsłużyć w szczególności funkcji.Zaleca się sprawdzenie wyjątek przed posługiwania się nimi.
Przykład
Poniższy kod generuje to ostrzeżenie, ponieważ __except zablokować będzie próbować obsługi wyjątków wszystkich typów:
#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 ...
}
}
Aby skorygować to ostrzeżenie, należy używać GetExceptionCode Aby sprawdzić, czy szczególne wyjątek przed jej obsługi, jak pokazano w poniższym kodzie:
#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 ...
}
}