C6285

更新:2007 年 11 月

警告 C6285:(<non-zero constant> || <non-zero constant>)的值始终为非零常数。是否要使用按位与运算符?

此警告意味着在测试上下文中出现的逻辑或运算中检测到两个大于 1 的常数值参数。此表达式的值始终为 TRUE。

大于 1 的常数值意味着逻辑或的参数可能是位域。在这种情况下,应考虑按位运算符 & 是否是更适合的运算符。

示例

下面的代码生成此警告:

#include <stdio.h>
#define     TESTED_VALUE    0x37
#define     MASK            0xaa

void f()
{
  if (TESTED_VALUE || MASK) 
  {
    puts("(TESTED_VALUE || MASK) True");
    // code...
  }
  else 
  {
    puts("(TESTED_VALUE || MASK) False");
    // code...
  }
}

若要更正此警告,请使用按位与 (&) 运算符,如下面的代码所示:

#include <stdio.h>
#define     TESTED_VALUE    0x37
#define     MASK            0xaa

void f(int flag)
{
  if ((TESTED_VALUE & MASK)== flag)
  {
    puts("true");
    // code...
  }
  else
  {
    puts("false");
    // code...
  }
}

请参见

参考

Bitwise AND Operator: &

Logical OR Operator: ||

编译器警告(等级 1)C4127