6

-Wunused-functionGCC のフラグを使用して、コードベースで未使用の関数を見つけようとしています。

予想通り、以下のコードをコンパイルするとgcc -Wall -Wunused-function main.cpp警告がunused variable表示されます。

warning: unused variable ‘x’ [-Wunused-variable]

ただし、コンパイラはunused-function警告を出しません。 GCCに未使用の関数を通知させるにはどうすればよいfoo()ですか?

// main.cpp

void foo(){ } //should (but doesn't) trigger 'unused function' warning

int main (int argc, char **argv){
    int x; //correctly triggers 'unused variable' warning
    return 0;
}

覚えておいてください、未使用の関数の警告が必要です。これは「どうすれば警告を取り除くことができるか」という質問ではありません。

4

3 に答える 3

14

非静的関数は、そのシンボルがエクスポートされ、他のコンパイル単位で使用できるようになるため、「未使用」とは見なされません。これは、gcc が検出できないものです。宣言されているが呼び出されていない静的-Wunused-functions関数について警告するためにのみ文書化されています。

于 2012-11-04T23:54:57.303 に答える
5

gcc ドキュメントから:

-Wunused-function: 静的関数が宣言されているが定義されていないか、インラインでない静的関数が使用されていない場合は常に警告します。この警告は -Wall によって有効になります。

ご覧のとおり、非静的関数を定義して宣言しました。-O3また、関数はインライン化されていません(最適化を使用する必要があります)。

あなたが求めているものがgccに存在するかどうかはまだわかりません。:-) しかし、そのオープン ソース..多分あなたはそれを実装できますか?

于 2012-11-04T23:55:55.220 に答える
5

リンカーの最適化を使用して、未使用の非静的関数を見つけることができます。

あなたのmain.cppをコンパイルしました

gcc -ffunction-sections -fdata-sections -Wl,--gc-sections -Wl,--print-gc-sections main.cpp

そして出力

/usr/bin/ld: Removing unused section '.text._Z3foov' in file '/tmp/cc9IJvbH.o'

使用されていないことを示し、リンカfoo()はそれを削除できます。

于 2014-05-20T10:09:24.713 に答える