C6318
Ostrzeżenie C6318: niewłaściwie zdefiniowane __try/__except: użyj stałej EXCEPTION_CONTINUE_SEARCH lub innej stałej, dla której wynik wyrażenia filtru wyjątków wyniesie zero.Kod, w bloku obsługi wyjątków, nie jest wykonywany.
To ostrzeżenie wskazuje, że jeśli w chronionym bloku strukturalnej obsługi wyjątków występuje wyjątek, wyjątek nie będzie obsłużony, ponieważ stała EXCECPTION_CONTINUE_SEARCH jest używana w wyrażeniu filtru wyjątków.
Ten kod jest równoważny z chronionym blokiem bez bloku obsługi wyjątków, ponieważ blok obsługi nie jest wykonywany.
Przykład
Poniższy kod generuje to ostrzeżenie:
#include <excpt.h>
#include <stdio.h>
void f (char *pch)
{
__try
{
// assignment might fail
*pch = 0;
}
__except (EXCEPTION_CONTINUE_SEARCH) // warning 6318
{
puts("Exception Occurred");
}
}
Aby poprawić to ostrzeżenie, należy użyć następującego kodu:
#include <excpt.h>
#include <stdio.h>
#include <windows.h>
void f (char *pch)
{
__try
{
// assignment might fail
*pch = 0;
}
__except( (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION) ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH )
{
puts("Access violation");
}
}