2012-01-18 8 views
6

質問:g++ does not show a 'unused' warningに従ってください。未使用のオブジェクトの検索(プリミティブ以外の値)

g ++がこれらの変数について警告しない理由を完全に理解していますが、どうにかして見つけてください。私が取り組んでいるコードには特別なケースはありませんので、単一のFloatArray x;はほとんど間違いなく残されています。

私が個々のクラス(未使用のFloatArrayオブジェクトの警告など)をマークする必要があっても、非常に便利です。私に何ができる?

+0

本当に問題はありますか?ほとんどのコンパイラがオブジェクトを何もインラインにしないで、それを使用しないのではないかと想像するのは難しいでしょうか? –

+0

しかし、コンパイラは、変数が "最適化前"に使われていないと判断したときに警告します。それは悪夢だろう! – rodrigo

答えて

1

基本的に、GCCにプラグインされている単純な静的解析ツールを作成したいのですか?そうであれば、MELTを使用して未使用の可変プリンタを迅速に実装することから始めます。私は問題の何かが欠けますが、GCC/G ++はあなたが欲しいとどのあなたがそうでない警告を指定できるようにするオプションを持っていた場合

http://gcc.gnu.org/wiki/MELT%20tutorial

+0

ありがとうございますが、私は「迅速」についてはわかりません。私は、記載された前提条件を満たしていません(近いものではないかもしれません)。私はすでにMELTでこれをやった人を見つけることができるかどうかを見極めようとします。 –

-1

私はわかりません。それでは、単に、-Wunused変数を有効にしました。

詳細はこちらをご覧ください:http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

はまた、-Wallはこれをオンにし、上の警告より多くの便利。 GCCと

+2

未使用変数警告は、コンストラクタ/デストラクタが望ましい効果を持つため、C++クラスではなく、プリミティブに対してのみ機能します。 – greg

+1

申し訳ありませんが、私は実際になぜこれがうまくいかないのか正確に説明する質問にリンクしています。 –

+0

フェア十分です。ある日、私は読むことを学ぶでしょう。 – Liam

3

さて、あなたが望むよう次のコードは警告しない:

struct Foo 
{ 
}; 
struct Bar 
{ 
    Foo f; 
}; 
int main() 
{ 
    Bar b; //warning: unused variable 'b' 
} 

をしかし、あなたも些細1のFooまたはバー構造体にコンストラクタ/デストラクタを追加する場合、それは警告しません。今、余分な未使用の変数をチェックするg++ -DTEST_UNUSEDでコンパイルする

struct Foo 
{ 
#ifndef TEST_UNUSED 
    Foo() {} 
#endif 
}; 
struct Bar 
{ 
    Foo f; 
}; 
int main() 
{ 
    Bar b; //warning! 
} 

struct Foo 
{ 
    Foo() {} 
}; 
struct Bar 
{ 
    Foo f; 
}; 
int main() 
{ 
    Bar b; //no warning! It calls Foo::Foo() into b.f 
} 

だから警告を取り戻すための最も簡単な方法は、関連するすべてのコンストラクタとデストラクタ条件付きコンパイルすることです。

私の最も明るいアイデアはありませんが、機能します。

+2

これはユーザー作成のオブジェクトでは機能しますが、言語によって提供されるオブジェクト(文字列、STLコンテナなど)では機能しません。 – greg

+0

これはおそらく私がプロジェクトで未使用のオブジェクトのかなりの量を見つけることができるようになるので、私はあなたが恩恵を得ることができます。 –

関連する問題