C6235
警告 C6235: (<0 でない定数> || <式>) は常に 0 でない定数です
この警告は、テスト コンテキストに出現する論理 OR 演算の左側で 1 以外の 0 ではない定数値が検出されたことを示します。結果の式は常に true に評価されるため、論理 OR 演算の右側は評価されません。これは、"ショートサーキット評価" と呼ばれます。
1 以外の 0 ではない定数値は、ビットごとの AND 演算子 (&) が意図されている可能性があることを示します。その 0 以外の定数値が 1 の場合、コード パスを選択して有効にするという一般的な用法では、この警告は生成されません。しかし、たとえば 1+0 などによって、その 0 以外の定数値が 1 に評価される場合、警告が生成されます。
使用例
次のコードでは、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");
}
}
次に示す例では、この警告を修正するためにビットごとの AND (&) 演算子を使用しています。
#define INPUT_TYPE 2
void f(int n)
{
if((INPUT_TYPE & n) == 2)
{
puts("bitwise-AND comparison true");
}
else
{
puts("bitwise-AND comparison false");
}
}