Chinaunix
标题:
找出C文件中不必要的头文件
[打印本页]
作者:
woshizzb
时间:
2014-07-10 10:58
标题:
找出C文件中不必要的头文件
本帖最后由 woshizzb 于 2014-07-12 23:03 编辑
工程里的老代码, C源文件中包含了一堆头文件, 其中很多是不需要包含的, 有没有什么工具或者办法能扫描出不需要的头文件?
===============================分割线==========================================
感谢各位热心回答. 这个问题确实很难, google有个开源项目叫include-what-you-use,就是为了解决这个问题的, 但也仍然可能有误报!
这是网址:
http://xinsuiyuer.github.io/blog/2013/10/30/include-what-you-use/
顺便再次鄙视GFW, 屏蔽了google搜索. baidu就是一垃圾, 搜技术资料搜出一堆广告
作者:
lxyscls
时间:
2014-07-10 10:59
同求{:3_188:}
作者:
hellioncu
时间:
2014-07-10 11:02
我觉得除了逐个注释后编译没有其他办法
作者:
q1208c
时间:
2014-07-10 11:03
把所有的 头文件 注释. 编译时如果报错, 就打开, 不报错, 就算 OK.
作者:
woshizzb
时间:
2014-07-10 11:14
依次注释编译确实是个办法, 但这办法确实是太低效了。
肯定是能做到的,例如依次解析各个符号是否在C文件中出现过。
作者:
hellioncu
时间:
2014-07-10 11:22
woshizzb 发表于 2014-07-10 11:14
依次注释编译确实是个办法, 但这办法确实是太低效了。
肯定是能做到的,例如依次解析各个符号是否在C ...
擦,一提交不见了。
不只是符号这么简单。
严格来说,去掉某个头文件还能编译通过不能证明该头文件没有用。
头文件的include次序也可能会影响编译结果。
作者:
fender0107401
时间:
2014-07-10 11:32
让我想起了“死代码”的那个帖子。。。
作者:
fender0107401
时间:
2014-07-10 11:40
仔细想来,似乎有点难啊。
作者:
woshizzb
时间:
2014-07-10 12:47
回复
6#
hellioncu
头文件都要求自包含, 所以只要能编译过,就可以认为不需要这一行"include”
仔细想想是有点复杂,所以想问问大家,也许有某个开源软件已经实现了的?那我就不用重复造轮子了
作者:
__BlueGuy_
时间:
2014-07-10 13:05
提示:
作者被禁止或删除 内容自动屏蔽
作者:
cokeboL
时间:
2014-07-10 13:14
为了解决这个问题,golang里如果你import了某个文件而没使用会编译报错。
如果有好办法解决,早就有人出来搞了
作者:
folklore
时间:
2014-07-10 13:45
回复
11#
cokeboL
报Warning就好了, 在C中如果报错过了。
有时只是使用了平台相关的头文件的话,就是报了不必要的错(且发现无法消除,因为消除是不正确的)。
作者:
cobras
时间:
2014-07-10 13:46
我有个思路,打算做一个工具:
先将工程目录中的全部源文件生成一个链表。
然后将这个链表中的全部源文件进行解析,分析include宏,生成一个引用列表。
最后分析文件链表和引用列表。没有被引用的源文件(当然仅指.h文件)就是不需要的。.c文件由工程文件包含,所以默认是全部需要。
作者:
folklore
时间:
2014-07-10 14:41
回复
13#
cobras
没有被引用的
源文件
(当然仅指
.h文件
)是什么意思?
作者:
cobras
时间:
2014-07-10 14:47
意思是没有被include
作者:
cokeboL
时间:
2014-07-10 14:50
回复
12#
folklore
跨平台兼容对于golang玩家来说是透明的,所以直接报错免得源码混乱也蛮好的感觉
作者:
qxhgd
时间:
2014-07-10 15:48
lint可以找到头文件包含关系的
作者:
woshizzb
时间:
2014-07-12 23:04
http://code.google.com/p/include-what-you-use/
作者:
folklore
时间:
2014-07-13 10:06
回复
15#
cobras
.h文件和.c文件没有直接关系,难道你是通过文件名?
作者:
zhanghaichen
时间:
2014-07-18 18:39
有个stripcc是用来去掉条件编译中不满足条件的代码的, 可能会有一定的帮助:
http://sourceforge.net/projects/stripcc/
作者:
cobras
时间:
2014-07-30 14:45
我承诺的工具开发工具好了,开源提供。
作者:
cobras
时间:
2014-07-30 14:46
地址为:[开源]分析项目中c/c++源代码中包含的全部头文件。
http://bbs.chinaunix.net/forum.p ... mp;fromuid=20350981
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2