我经常发现文件的头部分总是变得越来越大,但它从来没有变小过。在源文件的整个生命周期中,类可能会被移动和重构,并且很可能有相当多的#include不需要存在。保留它们只会延长编译时间,并增加不必要的编译依赖关系。试图找出哪些仍然需要是相当乏味的。

是否有某种工具可以检测多余的#include指令,并建议哪些我可以安全地删除? 棉绒会这样吗?


当前回答

如果您正在使用Eclipse CDT,您可以尝试http://includator.com,它对beta测试人员是免费的(在撰写本文时),并自动删除多余的#includes或添加缺失的#includes。对于那些拥有FlexeLint或PC-Lint并正在使用Elicpse CDT的用户,http://linticator.com可能是一个选项(beta测试也是免费的)。虽然它使用了Lint的分析,但它提供了自动删除多余的#include语句的快速修复。

其他回答

这里有一个简单的暴力方法来识别多余的头包含。它并不完美,但消除了“明显的”不必要的包含。清除这些代码对清理代码大有帮助。

这些脚本可以直接在GitHub上访问。

我从来没有找到一个成熟的工具来完成你的要求。我使用过的最接近的工具是IncludeManager,它将头包含树图形化,以便您可以直观地发现只包含在一个文件中的头和循环头包含之类的内容。

有一个免费的工具包括文件依赖监视器,它可以集成到可视化工作室中。它用红色显示多余的#include。

这不是自动的,但是doxygen会为#included文件生成依赖关系图。你必须从视觉上看它们,但它们对于了解什么在使用什么是非常有用的。

CScout重构浏览器可以检测C(不幸的是不是c++)代码中多余的include指令。你可以在这篇期刊文章中找到它如何工作的描述。