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