C6318
警告 C6318:__try/__except 未正确定义: 在异常筛选器表达式中使用了常数 EXCEPTION_CONTINUE_SEARCH 或另一个计算结果为 0 的常数。 异常处理程序块中的代码将不会执行
此警告意味着,如果该结构化异常处理程序的受保护块中出现异常,将不会处理该异常,因为异常筛选器表达式中使用了 EXCECPTION_CONTINUE_SEARCH 常数。
由于不执行该处理程序块,因此该代码等效于不带异常处理程序块的受保护块。
示例
下面的代码生成此警告:
#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");
}
}
若要更正此警告,请使用下面的代码:
#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");
}
}