さて、あなたが望むよう次のコードは警告しない:
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
}
だから警告を取り戻すための最も簡単な方法は、関連するすべてのコンストラクタとデストラクタ条件付きコンパイルすることです。
私の最も明るいアイデアはありませんが、機能します。
本当に問題はありますか?ほとんどのコンパイラがオブジェクトを何もインラインにしないで、それを使用しないのではないかと想像するのは難しいでしょうか? –
しかし、コンパイラは、変数が "最適化前"に使われていないと判断したときに警告します。それは悪夢だろう! – rodrigo