正在查找未使用的对象(非基本体值)

Finding unused objects (non-primitive values)

本文关键字:查找 未使用 对象      更新时间:2023-10-16

问题的后续处理:g++没有显示"未使用"警告。

我完全理解g++为什么不警告这些变量,但我希望它无论如何都能找到它们。我正在编写的代码没有任何特殊情况,所以一个FloatArray x;几乎肯定是遗留下来的。

即使我必须标记单独的类(例如对未使用的FloatArray对象的警告),它也会非常有用。我能做什么?

好吧,使用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进行编译,以检查是否有多余的未使用变量。

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

好吧,基本上你想创建一些插入GCC的简单静态分析工具吗?如果是这样的话,您可以从使用MELT开始快速实现一个未使用的变量打印机。

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

我不确定我是否在问题中遗漏了什么,但gcc/g++有一些选项,允许您指定想要的警告和不想要的警告。所以只需启用-Wunused变量。

请参阅此处了解更多详细信息:http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

此外,-Wall将打开这个和许多更有用的警告。