C6320
更新:2007 年 11 月
警告 C6320: 例外狀況篩選條件運算式是常數 EXCEPTION_EXECUTE_HANDLER。這可能會對不要進行處理的例外狀況做遮罩處理
這則警告表示在 __except 區塊中使用 EXCEPTION_EXECUTE_HANDLER 常數的副作用 (Side Effect)。在此情況下,__except 區塊中的陳述式 (Statement) 一律會執行以處理該例外狀況,包括不想要在特定函式中處理的例外狀況。建議您在處理該例外狀況之前先檢查它。
範例
下列程式碼會產生這則警告,原因是 __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 ...
}
}