重复包含头文件的问题

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

解决方法

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

#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文件里面,防止头文件的重复包含和编译而导致报错

猜你喜欢

转载自blog.csdn.net/weixin_50438937/article/details/114750431