Flexelint(UNIX版のPC-Lint)を使用してみましたが、結果はやや複雑でした。これは、私が非常に大きくて節のあるコードベースに取り組んでいるためと考えられます。未使用として報告された各ファイルを注意深く調べることをお勧めします。
主な心配は誤検知です。同じヘッダーの複数のインクルードは、不要なヘッダーとして報告されます。Flexelintは、ヘッダーが含まれている行やヘッダーが以前どこに含まれていたかを通知しないため、これは悪いことです。
自動化ツールがこれを誤る可能性がある方法の1つ:
A.hppの場合:
class A {
// ...
};
B.hppの場合:
#include "A.hpp
class B {
public:
A foo;
};
C.cppの場合:
#include "C.hpp"
#include "B.hpp" // <-- Unneeded, but lint reports it as needed
#include "A.hpp" // <-- Needed, but lint reports it as unneeded
Flexelintからのメッセージを盲目的にフォローすると、#includeの依存関係が崩れます。もっと病理的なケースがありますが、基本的には最良の結果を得るために自分でヘッダーを検査する必要があります。
ブログゲームの物理構造とC ++に関するこの記事を内側から強くお勧めします。彼らは#includeの混乱をクリーンアップするための包括的なアプローチを推奨しています:
ガイドライン
これは、ファイル間の物理的な依存関係の数を最小限に抑えるLakosの本からの抜粋した一連のガイドラインです。私はそれらを何年も使用しており、常に結果に本当に満足しています。
- すべてのcppファイルには、最初に独自のヘッダーファイルが含まれます。[をちょきちょきと切る]
- ヘッダーファイルには、解析に必要なすべてのヘッダーファイルを含める必要があります。[をちょきちょきと切る]
- ヘッダーファイルには、それを解析するために必要な最低限の数のヘッダーファイルが必要です。[をちょきちょきと切る]