C6320
警告 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 ...
}
}