C6320

更新:2007 年 11 月

警告 C6320:异常筛选器表达式为常数 EXCEPTION_EXECUTE_HANDLER。这样可能会屏蔽不打算处理的异常

此警告指出在 __except 块中使用 EXCEPTION_EXECUTE_HANDLER 常数的副作用。在这种情况下,__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 ...
   } 
}

请参见

参考

try-except Statement