查找未使用的对象(非原始值)

时间:2012-01-18 20:51:34

标签: c++ g++

跟进问题:g++ does not show a 'unused' warning

我完全理解为什么g ++没有对这些变量发出警告,但我还是想以某种方式找到它们。我正在处理的代码没有任何特殊情况,因此单个FloatArray x;几乎肯定是遗留下来的。

即使我必须标记单个类(例如警告未使用的FloatArray对象),它也会非常有用。我该怎么办?

3 个答案:

答案 0 :(得分:3)

嗯,使用GCC,以下代码会根据需要发出警告:

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

但是如果你将一个构造函数/析构函数添加到Foo或Bar结构中,即使是一个微不足道的结构,它也不会发出警告。

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

因此,重新获得警告的最简单方法是有条件地编译所有相关的构造函数和析构函数:

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

现在使用g++ -DTEST_UNUSED进行编译以检查额外的未使用变量。

不是我最聪明的想法,但它确实有效。

答案 1 :(得分:1)

那么,基本上你想创建一些插入GCC的简单静态分析工具?如果是这样,您可以先使用MELT快速实现未使用的可变打印机。

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

答案 2 :(得分:-1)

我不确定我是否遗漏了问题,但gcc / g ++有一些选项可以让你指定你想要的警告和你不想要的警告。所以只需启用-Wunused-variable。

请点击此处了解详情:http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

此外,-Wall将在此处启用此功能以及更多有用的警告。