小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


【cppcheck】 (warning) Logical disjunction always evaluates to true

はじめに

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ブロックに入ってしまいます。