是否有任何工具/方法来检测/删除所有未使用的变量,宏,头(包括)和函数从c++代码

Is there any tool / way to detect/remove all unused variables,macros,headers(includes) and functions from c++ code?

本文关键字:包括 函数 代码 c++ 方法 工具 任何 检测 删除 是否 未使用      更新时间:2023-10-16

我不得不自定义一些为其他目的编写的项目,但一些核心功能对于我的项目和工作是一样的。但是有很多变量、宏、函数等。这对我当前的上下文没有用处,它们只会使代码非常不容易阅读,并且不必要地变大。

所以我开始删除变量、宏函数等。通过使用Netbeans中的"查找引用"answers"显示调用图"。我使用netbeans远程开发工具的c/c++。但这很麻烦。有什么工具可以清理吗?

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

"包含你所使用的"意味着:对于每个符号(类型,函数变量(或宏)在foo中使用。Cc,或者foo。Cc或foo.h应该包含一个导出该符号声明的.h文件。include-what-you-use工具是一个程序,可以使用Clang库以分析#include的源文件来查找包括你使用的违规,并建议修复它们。

include-what-you-use的主要目标是删除多余的#include。它通过找出这个文件(对于.cc和.h文件)实际上不需要的#include和在可能的情况下用forward- declarations替换#include

有人可能期望Clang静态分析器能做到这一点,但是从我所看到的可用的检查不提供这样的东西。

这可能是一个很好的时机,有人可以向分析器提出一个特性请求,或者使用libtool创建一个单独的工具,类似于Clang tools

中描述的工具。与此同时,我建议您启用-Wall-Wextra编译器标志,这将触发以下警告(其中包括)(参见下面的GCC文档):
  • -Wunused-function
  • -Wunused-label
  • -Wunused-value
  • -Wunused-variable
  • -Wunused-parameter
  • -Wunused-but-set-parameter

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

但是为了获得关于未使用的函数参数的警告,您必须指定-Wextra -Wunused(注意-Wall意味着?-Wunused),或者单独指定-Wunused-parameter。

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

如果您想要更加迂腐,您可以通过添加-pedantic-errors标志

将所有警告转换为错误。

有关更多详细信息,请参阅GCC警告选项文档

我有时用添加

标记一大段代码为"未使用"的方法
#if 0
  ... lots of code 
#endif
然后可以编译代码,看看哪里出了问题。分析您得到的"未声明的变量X"错误,并恢复该错误所需的位。你可以通过"切割"#if 0块(添加一个#endif,然后再往下添加一个新的#if 0),或者通过将你需要的块移出当前块来做到这一点。

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

如果没有工具,我会很惊讶,但与此同时,你仍然需要做切割工作,一旦你在#if 0 ... #endif中有一大块代码,就很容易把它剪掉。

许多静态代码分析工具提供您想要的信息。维基百科有一个列表。我们已经成功地使用了这样一个工具(通过一些自定义的更改)来删除包含并加快编译时间。