次の方法で共有


C6236

警告 C6236: (<式> || <0 でない定数>) は常に 0 でない定数です。

この警告は、テスト コンテキストに出現する論理 OR 演算の右側で 1 以外の 0 ではない定数値が検出されたことを示します。結果の式は常に true に評価されるため、論理 OR 演算の左側は評価されません。これは、"ショートサーキット評価" と呼ばれます。

1 以外の定数値は、ビットごとの AND 演算子 (&) が想定されている可能性があることを示します。その 0 以外の定数値が 1 の場合、コード パスを選択して有効にするという一般的な用法では、この警告は生成されません。しかし、たとえば 1+0 などによって、その 0 以外の定数値が 1 に評価される場合、警告が生成されます。

使用例

次に示すコードでは、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" );
   }
}

次に示すコードでは、この警告を修正するためにビットごとの AND (&) 演算子を使用しています。

#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 (C++ ビット処理演算子)