小さい頃はエラ呼吸

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


【cppcheck】warning: Opposite conditions in nested 'if' blocks lead to a dead code block.

はじめに

C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。

warning: Opposite conditions in nested 'if' blocks lead to a dead code block.

cppcheckのバージョン
  • v1.67
サンプルプログラム

以下のソースプログラムを解析にかけると表示されます。

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>

int _tmain(int argc, _TCHAR* argv[])
{

  FILE *fp = fopen("hoge.txt", "r+b");
  if ( fp == NULL )
  {
    if (fp != NULL)  // warning: Opposite conditions in nested 'if' blocks lead to a dead code block.
    {
      fclose( fp );
      return -1;
    }
  }
  _getch();
  return 0;
}

上記のように、fp == NULLで判定したブロック内に、fp != NULLを判定しているロジックがあります。
この場合、fpがNULLであることは確定しており、fp != NULLのブロックは処理の到達しないデッドコードになります。

関連記事