为了账号安全,请及时绑定邮箱和手机立即绑定

如何在大型C ++项目中检测不必要的#include文件?

如何在大型C ++项目中检测不必要的#include文件?

C++
呼唤远方 2019-10-25 13:17:26
我正在Visual Studio 2008中从事大型C ++项目,并且有很多文件带有不必要的#include指令。有时#includes只是工件,删除它们后一切都会正常编译,在其他情况下,可以向前声明类并将#include移到.cpp文件中。是否有检测这些情况的良好工具?
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

尽管它不会显示不需要的包含文件,但Visual Studio具有一个设置/showIncludes(右键单击.cpp文件Properties->C/C++->Advanced),该设置将在编译时输出所有包含文件的树。这可以帮助识别不需要包含的文件。

您还可以看一下pimpl习惯用法,以减少对头文件的依赖,从而更轻松地查看可以删除的内容。


查看完整回答
反对 回复 2019-10-25
?
阿晨1998

TA贡献2037条经验 获得超6个赞

PC Lint对此非常有效,它也为您找到了其他各种愚蠢的问题。它具有可用于在Visual Studio中创建外部工具的命令行选项,但我发现Visual Lint加载项更易于使用。甚至Visual Lint的免费版本也有帮助。但是,试试PC-Lint。配置它使其不会给您太多警告会花费一些时间,但是您会惊讶于它的出现。


查看完整回答
反对 回复 2019-10-25
?
墨色风雨

TA贡献1853条经验 获得超6个赞

免责声明!我使用的是商用静态分析工具(不是PC Lint)。免责声明!


简单的非解析方法存在几个问题:


1)过载设置:


重载函数可能具有来自不同文件的声明。删除一个头文件可能导致选择了不同的重载,而不是编译错误!结果将是语义上的无声更改,此后可能很难跟踪。


2)模板专长:


与重载示例类似,如果您对模板有部分或明确的专长,则希望在使用模板时将它们全部可见。主模板的专门化可能在不同的头文件中。删除带有特殊化的标题不会导致编译错误,但是如果选择了该特殊化,则可能导致不确定的行为。(请参阅:C ++函数模板专业化的可见性)


正如“ msalters”指出的那样,对代码执行完整的分析还可以分析类的用法。通过检查如何通过文件的特定路径使用类,可以完全删除该类的定义(以及所有相关性),或者至少移到更接近include中主要源的级别。树。


查看完整回答
反对 回复 2019-10-25
  • 3 回答
  • 0 关注
  • 1108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信