C6239
警告 C6239:(<non-zero constant> && <expression>)的值始终等于 <expression> 的计算结果。 是否使用按位与运算符?
此警告意味着在测试上下文中出现的逻辑与运算的左侧检测到 1 以外的非零常数值。 例如,表达式 ( 2 && n ) 精简为 (!!n),后者为 n 的布尔值。
此警告通常意味着尝试检查应当使用按位与 (&) 运算符的位掩码。如果非零常数的计算结果为 1,则不会生成此警告,因为 1 用于有选择地选择代码路径。
示例
下面的代码生成此警告:
#include <stdio.h>
#define INPUT_TYPE 2
void f( int n )
{
if(INPUT_TYPE && n) // warning 6239
{
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( ( INPUT_TYPE & n ) )
{
puts("bitmask true");
}
else
{
puts("bitmask false");
}
}