はじめに
C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。
(warning) Logical disjunction always evaluates to true: val != 1 || val != 2
cppcheckのバージョン
- v1.65
サンプルプログラム
以下のソースプログラムを解析にかけると表示されます。
int func(int val) { if (val != 1 || val != 2) { return 1; } return 0; }
上記のように、否定 or 否定みたいな感じの間違いをしていると警告が表示されます。
変数valが1以外、または、2以外なので、valが2のときにifブロックに入ってしまいます。
関連記事
- 【cppcheck】(warning) Found calculation inside sizeof().
- C6305の解説 sizeof 数と countof 数の間で不一致が発生した可能性があります
- 【cppcheck】Variable 'xxx' is reassigned a value before the old one has been used.
- Visual C++ 2013でDLLを作成して動的読み込みしてみる。
- 【cppcheck】The code contains characters that are unhandled. Neither unicode nor extended ASCII are supported.