e412.c
論理結合演算子には boolean 値(1)




原作:
void e412(char val)
{
/* ビット演算子の書き間違い? */
if (val && 2)
{
f1() ;
f2() ;
f3() ;
}
}
修正例:
void e412(char val)
{
/* val の2ビット目が立っているかどうかチェック */
if (val & 2)
{
f1() ;
f2() ;
f3() ;
}
}
解説:
&&, || のオペランドに定数が来た場合、
結果が分かりきった定数と論理を結合する必要性は無いため、
ビット演算子との書き間違えが考えられます。
例:常に真 → val || 3
例:右オペランドは不要 → val || 0
(&& についても同様のため、省略)
この警告は、変数が int 型以外である場合に出力されます。
なお、左オペランドに定数が書かれている場合は、
ビット演算子の意図が低くなるため、
Review-C は警告致しません。
参考:
論理結合演算子は、積結合演算子 && と和結合演算子 || から構成されます。
『新ANSI C言語辞典 平林雅英著』より