警告 C6285:(<非零常数> || <非零常数>)的值始终为非零常数。是否使用按位与运算符?
此警告意味着在测试上下文中出现的逻辑或运算中检测到两个大于 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 ...
}
}