是否有任何工具可以帮助组织属于.c或.h文件顶部的#include
?
我只是想知道,因为我正在重新组织我的代码,将各种小函数定义/声明从一个长文件移动到不同的较小文件中。现在,每个较小的文件都需要位于长文件顶部的#include
的子集。
手动弄清楚所有#includes只是烦人且容易出错。虽然并非所有#include
都存在,但代码通常会编译。示例:文件A广泛使用std::vector
,但不包括vector
;但它目前包含一些不起眼的其他标题,恰好包含vector
(可能通过一些递归包含)。
答案 0 :(得分:2)
VisualAssistX可以帮助您跳转到类型的定义。例如。如果在源代码中使用MyClass类,可以单击它,选择goto定义,VisualAssistX打开包含该类定义的include文件(可能Visual Studio也可以这样做,但此时我已经习惯了VisualAssistX,我为VisualAssistX贡献了每个精彩的功能:-))。您可以使用它来查找源代码所需的包含文件。
PC-Lint可以完全相反。如果您的源中有一个未使用的包含文件,PC-Lint可以向您发出警告,以便您知道可以从源中删除包含文件(这将对您的编译时间产生积极影响)
答案 1 :(得分:1)
答案 2 :(得分:1)
我最近一直在处理这个问题。 在我们的项目中,我们使用C ++,每个类X都有一个X.h和一个X.cpp文件。
我的策略如下:
(1)如果A.h,其中声明了A类,则指的是B类 我必须包括标题B.h. 如果A类的声明只包含* B类型,那么我只需要一个 A.h.中的前向声明 B类; 我可能需要在A.cpp中包含B.h
(2)使用上述程序,我尽可能多地从A.h移动到A.cpp。然后我尝试一次删除一个include,看看.cpp文件是否仍然编译。这应该允许最小化.cpp文件中包含的文件集,但我不能100%确定结果是否最小。我也认为可以编写一个工具来自动执行此操作。我已经开始为Visual Studio编写一个。我很高兴知道有这样的工具。
注意:可能添加一个具有良好定义的导入/导出关系的正确模块构造可能是C ++ 0x的理想补充。这将使重组进口的任务变得更加容易,并加快编译速度。
答案 3 :(得分:1)
由于已经询问了这个问题,因此创建了一个新工具:include-what-you-use,它基于clang,提供映射以伪造某些符号的存在(unique_ptr
中memory
,但实际上在bits/unique_ptr.h
中定义了一些标准标题,并允许您提供自己的映射。
它提供了很好的诊断和自动重写。
答案 4 :(得分:1)
Now each of the smaller files needs a subset of the #includes that were at the top of the long file.
我使用VisualAssistX执行此操作。首先编译文件以查看缺少的内容。然后,您可以使用VisualAssistX的添加包含功能。所以我只需右键单击我知道需要包含的函数或类,然后点击Add Include。重新编译几次以过滤掉新的缺失包含并完成。我希望我写的可以理解:)
不完美,但比手工操作更快。
答案 5 :(得分:0)
我使用doxygen / dot-graphviz生成的图表来查看文件的链接方式。非常方便,但不是自动的,您必须目视检查图形,然后编辑代码以删除不必要的“#include”行。当然,并不适合非常大的项目(比如> 100个文件),图表变得无法使用。