自动删除不需要的#include 语句[重复]

Posted

技术标签:

【中文标题】自动删除不需要的#include 语句[重复]【英文标题】:Automatically removing unneeded #include statements [duplicate] 【发布时间】:2010-11-13 16:17:58 【问题描述】:

可能的重复:C/C++: Detecting superfluous #includes?How should I detect unnecessary #include files in a large C++ project?

嗨,

我一直在关注如何减少 C/C++ 项目的构建时间的大量讨论。通常,一个好的优化是通过使用前向声明来摆脱#include 语句。现在,我想知道:

是否有一个工具可以计算 C/C++ 标头之间的#include 依赖树 文件(我知道 Linux 上的 mkdep 可以做到这一点)然后开始一个“删除头文件/重新编译”循环?如果该工具可以尝试从依赖关系树中删除节点(例如,从文件中删除 #include 语句)然后重建项目以查看它是否仍然有效,那就太好了。

它不需要非常聪明(例如,通过使用指针而不是值等来重构代码以使头文件变得不必要),但我相信我从事的许多项目都有明显不需要的#include 语句。这通常是通过重构代码并移动它来实现的,但随后忘记删除#include。

有人知道这样的工具是否存在吗?

【问题讨论】:

可能的重复:***.com/questions/614794/… 和 ***.com/questions/74326/… 请注意,当您必须为多个配置(平台或构建选项)构建时,问题会变得更加复杂,因为您不想破坏其他构建。另一件事是,您自动最小化依赖关系的目标可能会干扰另一个目标:保持每个包含文件自给自足。 构建框是 x86_64,具有 8Gb+ 的 RAM,具有您可以获得的最大 L1/L2 缓存的快速多核 CPU,将是构建时间优化的强力但快速且廉价的方法问题。可以从拥有大量代码库的个人经验中看出这一点 :-) 此外,这只是第一次构建需要花费大量时间 - 如果您正在进行增量更改,您应该只需要重新编译很少的模块,因此值得研究这个问题也从另一个角度。 【参考方案1】:

这里有很多类似的问题。到目前为止,还没有人想出一个非常好的工具来列出依赖关系图并突出显示多个包含等(最喜欢的似乎是 doxygen),更不用说对文件本身进行编辑了。所以我猜分析器会是“否”——不过我很乐意犯错!

【讨论】:

以上是关于自动删除不需要的#include 语句[重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句删除重复数据

自动将日志语句添加到方法开始和方法结束[重复]

使用没有语句的 apache dbutils 获取自动增量生成的密钥 [重复]

mysql 隔段时间自动删除数据

为啥PostgreSQL UUID-OSSP可能产生重复值

我用Sqlserver2008查询时生成的Sql语句,都是自动换行的,如何设置可以不换行?