質問

古いコードをリファクタリングしているときに、特定のヘッダー ファイルに、.cpp ファイルから削除されて久しい関数の関数宣言がいっぱいあることに気付きました。これらを自動的に見つけて削除できるツールを知っている人はいますか?

役に立ちましたか?

解決

可能であれば、test.cpp ファイルを作成してそれらをすべて呼び出すこともできます。リンカーは、コードがないものに未解決としてフラグを立てます。この方法では、テスト コードはコンパイルするだけで済み、実際の実行について心配する必要はありません。

他のヒント

PC-lint は専用の目的に合わせて調整できます。

あなたの質問に対して次のコードをテストしました。

void foo(int );

int main()
{
    return 0;
}
lint.bat test_unused.cpp

そして次の結果が得られました:

============================================================

--- Module:   test_unused.cpp (C++)

    --- Wrap-up for Module: test_unused.cpp

Info 752: local declarator 'foo(int)' (line 2, file test_unused.cpp) not referenced
test_unused.cpp(2) : Info 830: Location cited in prior message

============================================================

したがって、目的のために警告番号 752 を渡すことができます。

lint.bat  -"e*"  +e752  test_unused.cpp

-e"*" はすべての警告を削除し、+e752 はこの特定の警告をオンにします

Doxygen を使用してコードにインデックスを付けると、各関数がどこから参照されているかを確認できます。ただし、各クラス (クラスごとに 1 つの HTML ページ) を参照し、それらを指すものが何もないページをスキャンする必要があります。

あるいは、ctags を使用してコード内のすべての関数のリストを生成し、objdump または同様のツールを使用して .o ファイル内のすべての関数のリストを取得し、それらのリストを比較することもできます。ただし、名前のマングリングにより問題が発生する可能性があります。

実際のソースツリーに本体を持たない関数が外部ライブラリで定義されている可能性があるため、そのようなことはないと思います。これは、ヘッダー内で宣言された関数のリストを作成し、それらが呼び出される場合があるかどうかを確認するスクリプトを作成することによってのみ実行できます。

私は持っています vim 用の C++ ftplugin できるのは、一致しない機能をチェックして報告することです -- 皆さん、ftplugin スイートのインストールはまだ簡単ではありません。ftplugin は ctags の結果に基づいています (したがって、 ヒューリスティック 他の環境にも簡単に適応できます)、インライン関数の場合には誤検知が発生することがあります。

HTH、

さらに、Doxygen (@Milan Babuskov) を使用すると、コンパイラーにこれに関する警告があるかどうかを確認できます。例えば。gcc には静的関数用の -Wunused-function があります。-fdump-ipa-cgraph。

良いことを聞いたことがあります PC-Lint, しかし、それはおそらくあなたのニーズに対してやりすぎだと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top