关于C#:如何自动查找未使用的#include指令?

关于C#:如何自动查找未使用的#include指令?

How do I automate finding unused #include directives?

通常,在编写新代码时,您会发现缺少#include,因为该文件未编译。 很简单,您添加所需的#include。 但是后来您以某种方式重构了代码,现在不再需要几个#include指令。 我如何发现不再需要哪些?

当然,我可以手动删除部分或全部#include行并将其重新添加,直到再次编译该文件,但这在具有数千个文件的大型项目中实际上是不可行的。 是否有任何工具可以帮助自动化任务?


您可以使用PC-Lint / FlexeLint执行此操作。

通常,没有可用的免费OS版本的工具。

您可以通过引用传递而不是通过值传递和前向声明传递来删除#include。这是因为编译器在编译时不需要知道对象的大小。但是,这将需要您进行大量的手动工作。好消息是它将减少您的编译时间。


您可以编写一个"蛮力"命令行工具,逐行注释掉#includes并测试编译是否仍然有效。让我知道您何时可以使用。 ; 0)


有一个名为includator的Eclipse插件,可帮助管理C / C ++项目中的包含依赖性

http://includator.com/


本文介绍了一种通过使用Doxygen的解析方法#include删除的技术。那只是一个perl脚本,所以很容易使用。


这是"蛮力" VC6宏,它通过在include中添加注释并运行编译功能,对在编辑器中打开的单个.cpp或.h文件起作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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

结束子

在某些情况下,可以对整个项目进行改进。


推荐阅读