Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1135938
  • 博文数量: 222
  • 博客积分: 5262
  • 博客等级: 大校
  • 技术积分: 3028
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-22 19:10
文章分类

全部博文(222)

文章存档

2012年(2)

2011年(192)

2010年(28)

分类: C/C++

2010-11-22 11:43:54

如果这样的头文件有include guard, 包含多次也不会有多大坏处, 只不过让源代码看上去杂乱随意, 不是好事.
假设在一个已有的项目中工作, 要整治此类现象, 可以通过
gcc -H 选项来让gcc在编译时额外地输出它包含的头文件, 如下:
gcc -H -o test test.c
. foo.h
. /usr/include/stdio.h
.. /usr/include/features.h
... /usr/include/sys/cdefs.h
.... /usr/include/bits/wordsize.h
... /usr/include/gnu/stubs.h
.... /usr/include/bits/wordsize.h
.... /usr/include/gnu/stubs-32.h
.. /usr/lib/gcc/i486-linux-gnu/4.2.3/include/stddef.h
.. /usr/include/bits/types.h
... /usr/include/bits/wordsize.h
... /usr/include/bits/typesizes.h
.. /usr/include/libio.h
... /usr/include/_G_config.h
.... /usr/lib/gcc/i486-linux-gnu/4.2.3/include/stddef.h
.... /usr/include/wchar.h
... /usr/lib/gcc/i486-linux-gnu/4.2.3/include/stdarg.h
.. /usr/include/bits/stdio_lim.h
.. /usr/include/bits/sys_errlist.h
. foo.h
Multiple include guards may be useful for:
/usr/include/bits/stdio_lim.h
接下来的事, 需要:
对每个被编译的.c 文件, 通过行首.的个数, 找出所有被直接包含的头文件, 再对这此排序, 找出连续重复的行, 就是被重复包含的文件.
如果项目是通过make 一个命令完成所有任务, 可以通过对cc或gcc偷梁换柱的技法来加上一个-H 选项, 这样可以保证所有的Makefile都不需要修改. 什么是偷梁换柱? 请看GCC 应用(二)
或者, 如果你的make 过程对环境变量CFLAGS是敏感的, 可以把-H加到CFLAGS变量中, 目的只有一个, 就是让-H出现在每一个实际运行的gcc命令中.
阅读(1513) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~