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" );
   }
}

请参见

其他资源

C++ Bitwise Operators