1
29
免责声明: 我的日常工作是为一家开发静态分析工具的公司工作。 如果大多数(如果不是全部)静态分析工具没有进行某种形式的头使用检查,我会感到惊讶。你可以使用 this 维基百科页面获取可用工具的列表,然后通过电子邮件向公司询问。 在评估工具时,您可能会考虑以下几点: 对于函数重载,您希望包含重载的所有头都可见,而不仅仅是包含通过重载解析选择的函数的头:
如果采用蛮力方法,首先删除所有头文件,然后重新添加,直到编译;如果先添加“f1.h”,则代码将编译,但程序的语义已更改。 类似的规则也适用于部分专业化的情况。无论是否选择了专门化,您都需要确保所有专门化都是可见的:
对于重载示例,蛮力方法可能会导致程序仍然编译,但具有不同的行为。 另一种相关的分析类型是检查是否可以向前声明类型。考虑以下事项:
在上面的示例中,不需要“a”的定义,因此可以更改头文件“foo.h”,使其只有“a”的正向声明:
这种检查还减少了头依赖性。 |
2
22
下面是一个脚本:
|
3
5
看一看 Dehydra . 从网站:
应该可以编写一个脚本来检查未使用的包含文件。 |
4
4
谷歌 cppclean 似乎找到未使用的头文件做得不错。我刚开始用它。它会产生一些误报。它通常会在头文件中发现不必要的include,但它不会告诉您需要关联类的正向声明,并且include需要移动到关联的源文件。 |
5
3
如果您使用EclipseCDT,您可以尝试 Includator 对于beta测试人员(在撰写本文时),它是免费的,并自动删除多余的内容,包括或添加缺少的内容。 免责声明:我为开发includer的公司工作,在过去的几个月里一直在使用它。它对我来说非常有效,所以请试一试:—) |
6
1
据我所知,没有一个(那不是pc lint),这是一个羞耻和令人惊讶的。我已经看到了执行这一点伪代码的建议(它基本上使您的“艰苦过程”自动化了):
把它放在一个夜间cron中,它应该完成这项工作,使projset没有未使用的头文件(显然,您可以手动运行它,但执行起来需要很长时间)。唯一的问题是,不包含头不会生成错误,但仍会生成代码。 |
7
1
我已经手动完成了这项工作,它在短期内是值得的(哦,这是长期的吗?-由于编译时间缩短,这需要很长的时间:
它也是一个递归的过程-保留在其中的每个头文件都需要检查是否有头文件 它 包括可以删除。此外,有时还可以将前向声明替换为头包含。 然后,整个过程需要每隔几个月/年重复一次,以保持在剩余邮件头之上。 事实上,我对C++编译器有点恼火,他们应该能够告诉你什么是不需要的——微软编译器可以告诉你在编译过程中,头文件的更改何时可以被安全地忽略。 |
8
0
如果有人感兴趣,我只是在SooCyFrand上安装了一个小Java COMAND LIN工具来完成这项工作。 正如它是用Java编写的,它在Linux上显然是可运行的。 项目的链接是 https://sourceforge.net/projects/chksem/files/chksem-1.0/ |
9
-1
如果首先确保每个头文件都是独立编译的,那么删除未使用的头文件的大多数方法都会有更好的效果。我很快就做到了(为打字错误道歉——我在家里打字:
哪里
对于每个文件
如果你
完成后,
|
Alex Pander · cleaner代码的嵌套命名空间[已关闭] 6 年前 |
Jamil Noyda · 导入模块的最佳方式Python[复制] 6 年前 |
Samselvaprabu · 我们是否需要不惜任何代价避免重复? 6 年前 |
user9549524 · 基于一列的值从二维矩阵中提取值 6 年前 |
MedAl · 不使用try/catch处理异常 6 年前 |
Declan McKenna · 特殊情况模式在Swift中是否多余? 6 年前 |