C6320
تحذير C6320: تعبير التصفية باستثناء هو EXCEPTION_EXECUTE_HANDLER ثابتة. وهذا قد قناع الاستثناءات التي تم غير معد إلى معالجة
وهذا تحذير يشير إلى تأثير جانبي استخدام ثابت EXCEPTION_EXECUTE_HANDLER في __except حظر. في هذه الحالة، حظر العبارة في __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 ...
}
}