关于在C中出现的循环引用问题,目的希望学习到如何规避头文件循环引用出现的这类错误.大概逻辑描述main.c:是程序入口,a.h,b.h,c.h为头文件;其中a.h中includec.h;c.hincludeb.h;b.hincludea.h运行程序报错,相关代码main.c#include#include"a.h"intmain(intargc,constchar*argv[]){printf("Hello!\n");return0;}a.h#ifndefa_h#definea_h#include"c.h"structsem{structeve*evet;};#endif/*a_h*/b.h#ifndefb_h#defineb_h#include"a.h"structpan{structsemsemt;};structdev{intx;};#endif/*b_h*/c.h#ifndefc_h#definec_h#include"b.h"structeve{structdev*devt;};#endif/*c_h*/期待给出自己遇到的关于头文件循环引用的例子和解决方法,有理有据;之所以问题发出来希望帮助更多遇到类似问题的人,同时希望答案相对全面一些.
2 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
循环引用得从设计上去规避。比如你的例子里根本原因是pan->sam->eve->dev的依赖,而pan和dev又放在同一个头文件里声明。解决办法很简单,就是把dev和pan的声明分离开来就是了。比较常见的做法就是前置声明+指针。毕竟c++里要实现classA{Bb;};classB{Aa;};是不可能的……
添加回答
举报
0/150
提交
取消