我必须自定义一些为其他目的而编写的项目,但一些核心功能对于我的项目是相同的并且可以正常工作。但是有很多变量、宏、函数等。它们对我当前的上下文没有用,它们只是使代码非常难以阅读并且不必要地大。
所以我开始通过在 Netbeans 中使用“查找引用”和“显示调用图”来删除变量宏函数等。我正在为 c/c++ 使用 netbeans 远程开发工具。但它很麻烦。那么有什么工具可以清理吗?
我必须自定义一些为其他目的而编写的项目,但一些核心功能对于我的项目是相同的并且可以正常工作。但是有很多变量、宏、函数等。它们对我当前的上下文没有用,它们只是使代码非常难以阅读并且不必要地大。
所以我开始通过在 Netbeans 中使用“查找引用”和“显示调用图”来删除变量宏函数等。我正在为 c/c++ 使用 netbeans 远程开发工具。但它很麻烦。那么有什么工具可以清理吗?
据我所知,目前没有工具可以完成您提到的所有事情,但是有一个工具可以帮助清理未使用的包含标头:include-what-you-use
“包含你使用的东西”的意思是:对于你在 foo.cc 中使用的每个符号(类型、函数变量或宏),foo.cc 或 foo.h 都应该 #include 一个导出该声明的 .h 文件象征。include-what-you-use 工具是一个可以使用 clang 库构建的程序,用于分析源文件的 #includes 以查找 include-what-you-use 违规,并建议修复它们。
include-what-you-use 的主要目标是删除多余的#include。它通过找出这个文件(对于 .cc 和 .h 文件)实际上不需要哪些 #includes 并在可能的情况下用 forward-declares 替换 #includes 来做到这一点。
有人可能期望Clang 静态分析器会执行此操作,但据我所知,availalbe 检查不提供此类功能。
这可能是某人向分析器建议功能请求或使用LibTooling创建单独工具的好时机,与Clang Tools中描述的工具类似
同时,我建议您启用-Wall和-Wextra编译器标志,这将触发以下警告(以及其他警告)(请参阅下面的 GCC 文档):
如果由于某种原因您不想这样做,您可以添加-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
,就很容易将其剪切掉。