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 未定义: