はじめに
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のブロックは処理の到達しないデッドコードになります。
関連記事