C语言中头文件不可以互相嵌套
解释如下:
假设情况1:
如果使用了预编译命令
#ifndef
#define
#endif
在头文件a.h中
#ifndef __A_H__
#define __A_H__
#include "b.h"
int c;
#endif
头文件 b.h中
#ifndef __B_H__
#define __B_H__
#include "a.h"
#endif
而在文件a.c中,代码如下
#include "a.h"
#include "b.h"
c将成为未定义,解释如下
我们可以将a.c中所包含的头文件展开如下:
#ifndef __A_H__ //a.h
#define __A_H__
#include "b.h"
|---#ifndef __B_H__ //b.h
#define __B_H__
#include "a.h"
|---#ifndef __a_H__ //由于之前已经定义头文件a.h
#define __a_H__//所以将不会再次定义
#include "b.h" //也就是变量 c 将不会被定义
int c;
#endif
#endif
#endif
如注释中所写,头文件不可嵌套。
假设情况2
如果不使用预编译指令
则a.h与b.h将互相嵌套,类似于递归调用。