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言語辞典 平林雅英著』より