为什么这样能够防止头文件重复调用?

[复制链接]
 楼主| MIHAWK 发表于 2010-11-30 11:28 | 显示全部楼层 |阅读模式
一些资料上说在头文件加上类似下面的语句就能防止头文件重复调用:
    #ifndef   _TEST_H_
    #define   _TEST_H_
    ……                                //头文件内容
    #endif

不是很明白,按照我的理解,如果之前没有定义过“_TEST_H_”,如上的条件编译会让整个头文件失效。另外头文件什么情况下会被重复调用,有什么后果?
能给的分数不多,望不吝赐教!
zhangf1021 发表于 2010-11-30 11:37 | 显示全部楼层
第一次调用,没定义过_TEST_H_,就会定义_TEST_H_ 然后头文件被调用
如果还有调用,_TEST_H_已被第一次定义,自动就跳过了
liang7143 发表于 2010-11-30 12:10 | 显示全部楼层
2L正解
airwill 发表于 2010-11-30 14:01 | 显示全部楼层
所以要注意, 不同的头文件, 切勿使用相同的定义.
 楼主| MIHAWK 发表于 2010-11-30 14:12 | 显示全部楼层
谢谢各位的解答!在这里我再问下,假设头文件被重复调用,会对系统有什么样的影响?
你IT了吗 发表于 2010-12-1 00:05 | 显示全部楼层
有两个影响:
1. 在此头文件中的变量或者宏定义会被重复定义(有时导致编译出错)
2. 影响编译预处理速度

如果头文件被重复引用多导致很多宏定义被重复定义#define

比如,有一个头文件为 test.h
其中有一个宏定义  #define  TEST_MACRO   0x1234

如果另一个头文件 test1.h和test2.h都包含了test.h
而test1.h和test2.h又同时在一个.c文件中使用,那么就会有重复调用的情况,就会对test.h文件进行多次展开,影响预处理的效率(多预处理了一次test.h)
原野之狼 发表于 2010-12-1 00:37 | 显示全部楼层
楼上几位都说的很好
include就是包含嘛
如果不这样做点手脚 你想象一下包含到C文件之后会出现啥问题
loveic985 发表于 2010-12-1 12:22 | 显示全部楼层
学习了!不错。
 楼主| MIHAWK 发表于 2010-12-1 20:49 | 显示全部楼层
谢谢几位了!分不多,分给2楼和6楼了:)
dragon20100708 发表于 2010-12-3 14:14 | 显示全部楼层
学习了!不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:脚踏实地 坚持不懈

0

主题

38

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部