C6240

警告 C6240:(<expression> && <non-zero constant>)的值始终等于 <expression> 的计算结果。 是否使用按位与运算符?

此警告意味着在测试上下文中出现的逻辑与运算的右侧检测到 1 以外的非零常数值。 例如,表达式 (n && 3) 精简为 (!!n),后者为 n 的布尔值。

此警告通常意味着尝试检查应当使用按位与 (&) 运算符的位掩码。 如果非零常数的计算结果为 1,则不会生成此警告,因为 1 用于有选择地选择代码路径。

示例

下面的代码生成此警告:

#include <stdio.h>
#define INPUT_TYPE 2

void f(int n)
{
   if (n && INPUT_TYPE) 
   {
      puts("boolean value of !!n is true");
   }
   else
   {
      puts("boolean value of !!n is false");
   }
}

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

#include <stdio.h>
#define INPUT_TYPE 2

void f(int n)
{
   if ( (n & INPUT_TYPE) )
   {
      puts("bitmask true");
   }
   else
   {
      puts("bitmak false");
   }
}

请参见

参考

& 运算符(C# 参考)