打印

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

[复制链接]
5209|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
所以要注意, 不同的头文件, 切勿使用相同的定义.

使用特权

评论回复
5
MIHAWK|  楼主 | 2010-11-30 14:12 | 只看该作者
谢谢各位的解答!在这里我再问下,假设头文件被重复调用,会对系统有什么样的影响?

使用特权

评论回复
6
你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)

使用特权

评论回复
7
原野之狼| | 2010-12-1 00:37 | 只看该作者
楼上几位都说的很好
include就是包含嘛
如果不这样做点手脚 你想象一下包含到C文件之后会出现啥问题

使用特权

评论回复
8
loveic985| | 2010-12-1 12:22 | 只看该作者
学习了!不错。

使用特权

评论回复
9
MIHAWK|  楼主 | 2010-12-1 20:49 | 只看该作者
谢谢几位了!分不多,分给2楼和6楼了:)

使用特权

评论回复
10
dragon20100708| | 2010-12-3 14:14 | 只看该作者
学习了!不错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

0

主题

38

帖子

1

粉丝