C6235
警告 C6235:(<non-zero constant> || <expression>)始终为非零常数
此警告意味着在测试上下文中出现的逻辑或运算的左边检测到 1 以外的非零常数值。 将不计算逻辑或运算的右边,因为结果表达式的计算结果始终为 true。 这被称作为“短路计算”。
1 以外的非零常数值意味着可能原本打算使用按位与运算符 (&)。 如果非零常数为 1,由于使用它可以有选择地启用代码路径,因此通常不会生成此警告。但是如果非零常数的计算结果为 1,如 1+0,则会生成此警告。
示例
在下面的代码中,因为 INPUT_TYPE 为 2,所以会生成此警告:
#define INPUT_TYPE 2
void f(int n)
{
if(INPUT_TYPE || n) //warning 6235 issued
{
puts("Always gets here");
}
else
{
puts("Never gets here");
}
}
下面的代码使用按位与 (&) 运算符来更正此警告:
#define INPUT_TYPE 2
void f(int n)
{
if((INPUT_TYPE & n) == 2)
{
puts("bitwise-AND comparison true");
}
else
{
puts("bitwise-AND comparison false");
}
}