C6290
تحذير C6290: تمثل عملية تشغيل النتيجة المنطقية: ! له الأسبقية عن &. استخدم & & أو (!(x & y)) بدلاً من ذلك
هذا التحذير يشير إلى الارتباك المحتمل في استخدم عامل تشغيل أو أسبقية المعامل الرياضي.
!عامل تعطي نتيجة منطقية، ولديه الأسبقية من &.المختصة بالبت-و (&) يأخذ العامل الثاني الوسيطات الحسابية. ولذلك، واحد الأخطاء التالية قد تم الكشف عن:
تعبير هو mis-parenthesised:
لأن النتيجة !هو قيمة منطقية (صفر أو واحد)، محاولة إلى فقط سوف تنتهي اختبار المتغيرات الثاني أن بت بشكل عام للاختبار البت الأقل في الجانب الأيمن: ((!8) & 1) == 0.
!العامل هو غير صحيحة، ويجب أن يكون ~بدلاً من ذلك:
!قام عامل منطقي النتيجة، بينما ~عامل تشغيل يحتوي على النتائج الحسابية. هذه العوامل عدم interchangeable، حتى عندما تعمل تشغيل القيمة منطقية (صفر أو واحد): ((!0x01) & 0x10) == 0x0، فترة من الوقت((~0x01) & 0x10) == 0x10.
عامل تشغيل ثنائي &هو غير صحيحة، وبدلاً من ذلك يجب أن يكون &&:
بينما &يمكن في بعض الأحيان interchanged مع &&، هو لا يعادل لأن ذلك يفرض على تقييم ل جانب أيمن للتعبير. يمكن أن تكون بعض تأثيرات جانبية في هذا النوع من التعبير المحطة الطرفية.
هو صعوبة في الحكم خطورة th هو المشاكل بدون فحص تعليمات برمجية. التعليمات البرمجية يجب فحصه للتأكد من أن الاختبار المعني هو التي تحدث.
مثال
يلي تعليمات برمجية ينشئ هذا التحذير:
void f(int x, int y)
{
if (!x & y)
{
// code ..
}
}
إلى تصحيح هذا التحذير، استخدم نموذج تعليمات برمجية التالي:
void f(int x, int y)
{
/* When testing that x has no bits in common with y. */
if (!(x & y))
{
// code
}
/* When testing for the complement of x in y. */
if ((~x) & y)
{
// code ...
}
}
#include <windows.h>
void fC(int x, BOOL y )
{
/* When y is a Boolean or Boolean result. */
if ((!x) && y)
{
// code ...
}
}
C6317 تحذير هو إذا تم الإبلاغ عنها !العامل هو تشغيل الجانب الأيسر من &عامل التشغيل.