重复包含头文件的问题

解决重复包含头文件的问题

解决方法

在每个头文件的最前端和最后端加以下代码

#ifndef __xxx_x //其中__xxx_x为唯一的标志符
#define __xxx_x
...
...
...
#endif

说明

条件编译,解决的是头文件重复包含的问题
比如:
a.h
b.h //这个b.h是包含a.h的

#include “a.h”
#include “b.h”
如果预处理阶段,写成这样,实际上a.h就会插入两次了,编译的时候容易会报错

要想不出现这种情况,可以在a.h里加上条件编译代码
#ifndef __A_H
#define __A_H
… //原来a.h的内容
#endif

原理:在文本插入后,会再做宏的判断

第1次展开

#ifndef __A_H //第1次,会先判断宏是否存在
#define __A_H //如不存在,则创建宏,并引入宏名后的内容(宏体)
//很明显是不存在,条件满足,走
#define
.... //原来a.h的内容
#endif

第2次展开,因为重复定义了,会有下面这个代码

#ifndef __A_H
#define __A_H
.... //原来a.h的内容
#endif //而上面宏已经创建了,条件已经不满足,走#endif后面的代码

总结

示例:
#ifndef x    //先测试x是否被宏定义过
#define x
    程序段1  //如果x没有被宏定义过,定义x,并编译程序段 1
#endif
    程序段2  //如果x已经定义过了则编译程序段2的语句,“忽视”程序段 1

#ifndef #define #endif的作用,相当于当第二次重复展开的时候,不会把a.h里的内容插入到.c的main文件里面,防止头文件的重复包含和编译而导致报错

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值