10

通过链接器反馈很容易获得未使用的函数和变量的列表,但是如何检测那些未使用的宏定义和 typedef?在整个项目中是否必须逐行浏览代码和git grep?

4

4 回答 4

14

对于源文件中定义的宏,您可以尝试-Wunused-macrosgcc/clang 标志。-Wunused-local-typedefs在 gcc 中也有。

于 2013-05-15T09:04:36.737 回答
7

C 和 C++ 程序的静态分析工具可能包括对未使用的预处理器宏的检查。

例如参见PC-Lint

另一种可能性是进入特定的包含文件并用于#ifdef 0删除大部分宏,然后使用一种分而治之的算法检查编译器错误。

但是,我希望随着源代码的大小变大,静态分析工具会是更好的方法。

于 2013-05-15T02:44:50.040 回答
2

对于未使用的宏,您可能需要查看coan。它具有可能有助于完成此任务的选项。从关于页面

在给定配置下,活动预处理器指令中会出现哪些符号?

(如果预处理器指令不在任何错误#if 的范围内,则它是活动的)。再次假设您对 app 中的 C 源代码感兴趣,您可以使用以下命令显示这些符号的列表,包括文件名和行号:

$>coan 符号 --recurse --locate --active --once --filter c,h app

它具有删除条件代码块(#if 0和朋友)的选项,以及处理 C 预处理器的许多其他有用功能。我会用它来收集所有的#defined 符号和所有的#ifdefordefined符号和朋友。我会对这两个符号集合进行排序和唯一化并区分它们。这是定位错别字的好方法。然后我会分别对它们进行直方图,从最不频繁的开始,然后逐个列出。

对于未使用的 typedef,这是另一个挑战。您可以使用像OpenGrokGNU Global这样的交叉引用类型程序,但这不是很自动化。

于 2013-05-15T05:22:23.823 回答
1

有 cscout(现在开源)在:

https://github.com/dspinellis/cscout

找到未使用的'extern',#define。

于 2015-10-05T12:14:12.303 回答