正在查找未使用的对象(非基本体值)
Finding unused objects (non-primitive values)
问题的后续处理: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将打开这个和许多更有用的警告。
相关文章:
- 普通环路未使用gcc 4.8.5自动矢量化
- 在更改for循环的第三部分后,未使用for循环结果
- 使用typeid警告未使用的变量
- C++删除未使用的类属性会导致 std::logic_error
- 警告 C4552:">>":未使用表达式的结果
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 为什么我会收到警告,指出函数已使用但未定义,以及已定义但未使用?
- 如果我想链接静态库并删除未使用的符号.txt我应该如何处理 Cmakelist
- 可视化C++载体:未使用的容量
- GCC 中 __attribute__((未使用)) 和 __attribute((未使用)) 之间的区别
- 循环访问还包含未使用元素的字符串数组
- Q维德格特关闭事件(..)未使用 QProcess::terminate() 调用
- Visual Studio "fatal error LNK1104: cannot open file"未使用或包含的库
- G++ 编译器是否在未使用返回值的情况下将 constexpr 函数视为常规函数?
- 链接器输入文件未使用,因为链接未完成,我无法获得.o
- 具有查找表的可选帮助的对象查找,如果未使用,则必须对其进行优化
- 如何使用 cppclean 查找未使用的标头
- 正在查找未使用的对象(非基本体值)
- 使用代码分析在Visual Studio 2010中查找未初始化的成员
- 如何在Visual C++2008中查找未使用的属性/方法