编程过程中,经常会碰到头文件的相互包含,如果处理不慎,就会报错。
比如在头文件A.h中有如下代码(代码中的B_Handle是在头文件B.h中定义的):
#include "pub_head.h"
void A_fun(B_Handle b);
在头文件B.h中有如下代码:
...
typedef struct _B_Obj_t_
{
...
} B_Obj_t;
typedef struct _B_Obj_t_ *B_Handle;
在头文件pub_head.h中,有下面两种头文件包含形式:
#include "B.h"
#include "A.h"
#include "A.h"
#include "B.h"
对于case 1,编译结果没有错误,但是,对于case 2,编译却出现了如下错误:
#20 identifier "B_Handle" is undefined
其原因就是:由于A.h中用到了B.h中定义的B_Handle,因而在预处理头文件pub_head.h的时候,应该先有B.h,然而,case 2的头文件包含顺序弄反了,必然有问题。
作者注:不要以为A.h中已经包含了头文件pub_head.h(也就包含了B.h),就不会出问题,对于这种头文件相互包含的情况,一定要注意文件包含的顺序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)