def*_*ode 18
我认为你真正想要的是"包括你使用的东西",而不是一组最小的标题.IWYU意味着尽可能向前声明,并包含直接声明您使用的符号的标头.你不能盲目地将文件转换为IWYU,因为它可能不再编译.发生这种情况时,您需要找到丢失的标题并添加它.但是,如果每个文件都是IWYU清理,即使您必须偶尔添加标题,您的编译总体上也会更快.更不用说你的标题将更有意义/自我记录.
正如我之前的回答所指出的那样,技术上可以包含比IWYU所需的更少的标题,但这通常是浪费时间.
现在,如果只有一个工具,大多数IWYU重构grunt为你工作:)
我考虑过创建/使用这样的工具一次.我们的想法是使用二进制搜索和重复编译来查找最小的包含集.经过进一步调查,似乎没有用处.
一些问题:
更改包含的头文件可以更改行为,并仍然允许文件进行编译.特别是一个例子,如果你std::swap在一个单独的头文件中定义了自己的.您可以删除该标头,您的代码仍将使用默认std::swap实现进行编译.但是,std::swap可能是:低效,导致运行时错误,或者更糟糕的是产生微妙错误的逻辑.
有时头文件包含作为文档.例如,要使用std::foreach,通常包括<vector>足以使其编译.额外的代码更有意义#include <algorithm>.
编译器或编译器版本之间的最小编译集可能不可移植.std::foreach再次使用该示例,无法保证std::foreach将提供<vector>.
无论如何,最小的包含集合可能不会显着影响编译时间.Visual Studio和gcc支持#pragma once使得重复包含基本上不存在的性能明智.并且至少gcc的预处理器已经过优化,可以非常快速地(尽可能快地#pragma once)处理包括防护装置.
大多数编译器都对预编译的头文件有某种支持.
删除完全不需要的包含的工具可能很好.您似乎暗示您希望看到一个删除所需包含的包含由其他包含多余的包含.我不会成为狂热的粉丝.有人可以删除另一个冗余包括一天,然后其他一些可怜的懒人将不得不追踪硬盘上某处包含文件的所有缺失符号突然出现在他们身上没有明显的原因.
| 归档时间: |
|
| 查看次数: |
9543 次 |
| 最近记录: |