是否有任何工具/方法可以检测/删除c ++代码中所有未使用的变量,宏,标题(包括)和函数?

时间:2013-05-14 08:33:55

标签: c++ code-cleanup devtools

我必须自定义一些为其他目的而编写的项目,但是我的项目的一些核心功能是相同的,并且按原样工作。但是有很多变量,宏,函数等......这些对我当前的上下文没有用,它们只是让代码非常难以阅读而且不必要的大。

所以我开始使用Netbeans中的“查找引用”和“显示调用图”来删除变量宏函数等。我正在使用netbeans远程开发工具来实现c / c ++。 但它繁琐。那么有没有工具可以清理它?

3 个答案:

答案 0 :(得分:10)

据我所知,目前没有工具能够完成你提到的所有事情,但是有一个工具可以帮助清理未使用的包含标题:include-what-you-use

  

包含您使用的内容”表示:对于每个符号(类型,功能   您在foo.cc中使用的变量或宏),foo.cc或foo.h   应该#include一个导出该符号声明的.h文件。   包含什么是你使用的工具是一个可以用它构建的程序   clang库以分析要查找的源文件的#includes   包括你使用的违规行为,并为他们提出修复建议。

     

包括你使用什么的主要目标是删除多余的#includes。它通过弄清楚这个文件实际上不需要#includes(对于.cc和.h文件)来做到这一点,以及   在可能的情况下将#includes替换为forward-declares。

有人可能会认为Clang static analyzer会这样做,但从我看到的the availalbe checks不提供此类内容。

这可能是suggest a feature request分析员使用LibToolingClang Tools

中描述的工具类似的单独工具的好时机

与此同时,我建议您启用 -Wall -Wextra 编译器标志,这将触发以下警告(以及其他警告)(请参阅GCC文档)下面):

  • -Wunused功能
  • -Wunused-label
  • -Wunused-value
  • -Wunused-variable
  • -Wunused参数
  • -Wunused-但设定参数

如果由于某种原因您不想这样做,您可以添加 -Wunused ,这将只启用上述-Wunused选项,而不使用其他标志-Wall或-Wextra增加了。

  

但是为了得到关于未使用的函数参数的警告,你   必须指定-Wextra -Wunused(注意-Wall暗示   -Wunused),或单独指定-Wunused-parameter。

当然,这意味着您必须手动进行清理

如果你想变得更加迂腐,你可以通过添加 -pedantic-errors 标志将所有警告转换为错误

有关详细信息,请阅读GCC Warnings Options documentation

答案 1 :(得分:2)

我有时会使用添加

将大块代码标记为“未使用”的方法
#if 0
  ... lots of code 
#endif

然后,您可以编译代码,看看出了什么问题。分析您获得的“未声明的varibale X”错误并恢复所需的位。你可以通过“切断”#if 0块(添加#endif,然后再增加#if 0一点),或者移动你需要的部分来实现这一点。当前块。

例如,如果您有一个全局变量或宏块,只需将#if 0放在所有变量或宏周围,然后查看实际使用的是哪些。 [虽然如果在#ifdef等中使用宏,可能会有点棘手。

如果没有工具,我会感到惊讶,但与此同时,你仍然需要完成裁剪工作,一旦你在#if 0 ... #endif中有大量代码,它就是很容易削减它。

答案 2 :(得分:0)

许多静态代码分析工具提供您想要的信息。 Wikipedia has a list。 我们已成功使用such a tool(带有一些自定义更改)来删除包含并加快编译时间。