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

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

编译结果如下,出现未定义类型 t1,实际上 t1 在 1.h 中被定义。
头文件互相引用导致的编译错误-LMLPHP

原因在于:
  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 未定义:
头文件互相引用导致的编译错误-LMLPHP头文件互相引用导致的编译错误-LMLPHP
10-16 20:35