通常在编写新代码时,您会发现缺少#include,因为该文件无法编译。很简单,你添加了所需的#include。但是后来你以某种方式重构代码,现在不再需要一些#include指令。如何发现不再需要哪些?
当然,我可以手动删除部分或全部#include行并将其添加回来,直到文件再次编译,但这在包含数千个文件的大型项目中并不可行。是否有任何工具可以帮助自动化任务?
答案 0 :(得分:4)
您可以使用PC-Lint/FlexeLint来执行此操作。
不同寻常的是,该工具没有免费的操作系统版本。
您可以通过引用传递#includes而不是传递值并转发声明来删除#includes。这是因为编译器不需要在编译时知道对象的大小。但是,这需要代表您进行大量的手动工作。好处是它会缩短你的编译时间。
答案 1 :(得分:3)
你可以写一个'强力'命令行工具,逐一注释#includes并测试编译是否仍然有效。你什么时候开始工作让我知道。 ; 0)
答案 2 :(得分:2)
This article解释了使用Doxygen解析#include删除的技巧。这只是一个perl脚本,所以它很容易使用。
答案 3 :(得分:2)
有一个名为includator的Eclipse插件,它有助于管理C / C ++项目中的包含依赖项
答案 4 :(得分:0)
这是'强力'VC6宏,适用于单个 .cpp 或 。 h 文件在编辑器中通过注释包括并运行compile:
来打开Sub RemoveNotUsedIncludes()
'Check if already processed; Exit if so
ActiveDocument.Selection.FindText "//INCLUDE NOT USED", dsMatchFromStart
IF ActiveDocument.Selection <> "" THEN
ActiveDocument.Selection.SetBookmark
MsgBox "Already checked"
ActiveDocument.Selection.ClearBookmark
EXIT SUB
END IF
'Find first #include; Exit if not found
ActiveDocument.Selection.FindText "#include", dsMatchFromStart
IF ActiveDocument.Selection = "" THEN
MsgBox "No #include found"
EXIT SUB
END IF
Dim FirstIncludeLine
FirstIncludeLine = ActiveDocument.Selection.CurrentLine
FOR i=1 TO 200
'Test build
ActiveDocument.Selection.SetBookmark
ActiveDocument.Selection = "//CHECKING... #include"
Build
ActiveDocument.Undo
ActiveDocument.Selection.ClearBookmark
IF Errors = 0 THEN
'If build failed add comment
ActiveDocument.Selection.EndOfLine
ActiveDocument.Selection = " //INCLUDE NOT USED"
END IF
'Find next include
ActiveDocument.Selection.EndOfLine
ActiveDocument.Selection.FindText "#include"
'If all includes tested exit
IF ActiveDocument.Selection.CurrentLine = FirstIncludeLine THEN EXIT FOR
NEXT
End Sub
如果可以改进整个项目的工作。