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 ...
   } 
}

راجع أيضًا:

المرجع

try-except Statement