头文件互相引用导致的编译错误

2550阅读 0评论2018-04-09 flightbird
分类:C/C++



c源程序 m.c 包含两个头文件 1.h 和 2.h
1.h 包含 2.h; 2.h 包含 1.h

编译结果如下,出现未定义类型 t1,实际上 t1 在 1.h 中被定义。


原因在于:
  1.  m.c 首先解析 1.h;
  2.  1.h 定义宏 H1_H,接着包含头文件 2.h,注意此时还没有走到第8句定义 t1;
  3.  2.h 定义宏 H2_H,接着包含头文件 1.h,因为已经定义宏 H1_H,故此时忽略头文件 1.h;
  4.  走到第6行时,发现 t1 未定义。

若交换 m.c 的2、3句,先包含 2.h, 再包含 1.h,则出现 t2 未定义:

上一篇:高效 python (3)
下一篇:一些软件推荐