关于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

结束子

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


推荐阅读

    linux常见命令指令符?

    linux常见命令指令符?,工作,系统,地址,信息,命令,目录,管理,标准,时间,功能,l

    linux查找重复项命令?

    linux查找重复项命令?,工具,系统,电脑,百度,文件,命令,情况,名字,标准,通用,l

    linux命令查找进程?

    linux命令查找进程?,系统,名称,软件,状态,进程,电脑,信息,命令,材料,数据,怎

    linux交叉编译命令?

    linux交叉编译命令?,工具,平台,位置,网上,环境,基础,代码,编译器,路径,目标,

    linux命令查找日志?

    linux命令查找日志?,地址,信息,系统,名称,对比,状态,实时,命令,日志,等级,lin

    linux编译源代码命令?

    linux编译源代码命令?,工具,代码,百度,最新,环境,项目,系统,电脑,密码,内核,l

    linux编译时显示命令?

    linux编译时显示命令?,系统,基础,工具,代码,百度,下来,网上,命令,内核,文件,L

    linux命令查找内容?

    linux命令查找内容?,命令,文件,网络,名称,信息,工作,标准,系统,管理,位置,lin

    linux只能命令行编译?

    linux只能命令行编译?,系统,代码,工具,软件,密码,平台,项目,设计,最新,设备,L

    linux命令行编译c?

    linux命令行编译c?,代码,环境,系统,工具,平台,终端,程序,编辑,文件,源程序,在

    linux发现新网卡命令?

    linux发现新网卡命令?,系统,信息,网络,电脑,工具,服务,状态,命令,网卡,名称,

    linux数据库查找命令?

    linux数据库查找命令?,位置,名称,状态,服务,软件,信息,系统,命令,名字,密码,

    linux中如何编译命令?

    linux中如何编译命令?,系统,代码,基础,暂停,环境,工具,百度,命令,文件,终端,

    linux命令发现不了?

    linux命令发现不了?,软件,系统,发行,工具,名称,不了,命令,地方,代理,信息,lin

    linux查找包的命令?

    linux查找包的命令?,基础,软件,项目,数据,名称,命令,环境,技术,文件,子目录,

    linux指令中的命令?

    linux指令中的命令?,系统,基础,工作,地址,命令,工具,管理,信息,网络,控制台,L

    linux编译连接命令?

    linux编译连接命令?,系统,代码,环境,工具,文件,资料,电脑,百度,终端,命令,在l

    linux命令行指令大全?

    linux命令行指令大全?,工作,地址,系统,信息,命令,目录,工具,管理,基础,控制

    linux内核编译命令?

    linux内核编译命令?,系统,软件,环境,电脑,内核,最新,下来,官网,体系,名字,在l

    linux命令查找字符串?

    linux命令查找字符串?,工具,信息,命令,字符串,系统,工作,文件,范本,样式,文