C6318
avviso C6318: __try/__except definiti in modo non corretto: utilizzo della costante EXCEPTION_CONTINUE_SEARCH o di un'altra costante che restituisce zero nell'espressione di filtro eccezioni. Il codice nel blocco del gestore eccezioni non viene eseguito
Questo avviso indica che se si verifica un'eccezione nel blocco protetto di questo gestore eccezioni strutturato, l'eccezione non verrà gestita poiché la costante EXCECPTION_CONTINUE_SEARCH viene utilizzata nell'espressione di filtro eccezioni.
Il codice è equivalente al blocco protetto senza il blocco del gestore eccezioni, in quanto quest'ultimo non viene eseguito.
Esempio
Il codice seguente genera questo avviso:
#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");
}
}
Per risolvere il problema, utilizzare il codice seguente:
#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");
}
}