如何检测未使用的宏定义&类型定义?

时间:2013-05-15 02:36:24

标签: c++ c

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

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:7)

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

例如,请参阅PC-Lint

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

但是,随着源代码大小变大,我认为静态分析工具会更好。

答案 2 :(得分:2)

对于未使用的宏,您可能需要查看coan。它有可能有助于完成此任务的选项。来自about page

  

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

     

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

     

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

它可以选择删除条件化的代码块(#if 0和朋友),以及处理C预处理器的许多其他有用功能。我会用它来收集所有#define d符号以及所有#ifdefdefined符号和朋友。我会对这两个符号集进行排序和统一,并将它们区分开来。这是查找拼写错误的一种非常好的方法。然后我会分别对它们进行直方图分析,从最不频繁的方向开始,然后沿着列表工作。

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

答案 3 :(得分:1)

cscout(现在是开源)位于:

https://github.com/dspinellis/cscout

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