我将 VS2008 用于 C++ 项目。代码很老,经过很多人的手。有几个不再使用的类层次结构、函数、枚举等。
有没有办法让编译器/链接器列出已声明或定义但未在任何地方引用的标识符?
我将 VS2008 用于 C++ 项目。代码很老,经过很多人的手。有几个不再使用的类层次结构、函数、枚举等。
有没有办法让编译器/链接器列出已声明或定义但未在任何地方引用的标识符?
VS 将警告在函数中声明但未使用的标识符,您可能需要移至警告级别 4,但对于全局变量,以及寻找许多其他潜在问题,您最好尝试lint或visual lint
PC-Lint“整个项目”分析(同时分析多个文件)可以做到这一点。如果您需要帮助设置它,请随时与我联系。
不确定 Visual C++,但 g++ 会警告未使用的变量。您可以尝试通过 g++ 传递您的代码。
PC-Lint将执行此操作。但是,不要一无所有地运行它。我做了并且有 120 万个错误——相当于每行约 5 个。这被大大推高了,因为几乎每个 UI 类都引用了 resource.h 和 resource.h 列出了很多 #defines,lint 说“用 const int 替换定义”。要获得一个好的起点,请阅读Power of 2 博客上的这篇文章。
对于最明显的未使用声明,高警告级别会解决这个问题。
关于未使用代码的识别,deadstripper(不是深夜犯罪剧的中心,而是在链接期间剔除未使用代码的机制)只会让您部分了解 - 您真正想要的是代码覆盖率分析工具。存在很多,不幸的是它们都相当昂贵。
具有良好上下文标记和调用图机制的强大编辑器也将有所帮助。
参考 Graham 的帖子:FWIW 我从来没有真正看到使用 resource.h 文件的“用 const int 替换定义”消息——尽管其他一些(以前在同一位置定义)可能会很痛苦。
无论如何,如果某个特定的 PC-Lint 消息妨碍您发现您正在寻找的内容,那么在您的 options.lnt 文件中使用 -e 将其关闭是一件简单的事情。还需要注意 -w 选项,它允许您全局设置警告级别(例如 -w0 +e766 关闭除消息 766 之外的所有内容)。
对于未使用的符号和声明,您需要注意诸如 755(信息——未引用全局宏)、758(信息——未引用全局枚举)、769(信息——未引用全局枚举常量)之类的消息和 1714(信息——未引用成员函数)。请记住,这些在单个文件分析中被抑制,因此您需要运行整个项目分析才能看到它们。