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