关于头文件交叉引用的问题
事情是这个样子的,我有几个结构体想用,但是在不同的文件里面aa.h和bb.h都是原来写好的程序,aa.h调用了bb.h,但是现在bb.h想用aa.h的东西,一调用aa.h就会报错,而且命名定义了的东西也会报错。这是为什么?
把源文件中所有调用bb.h的地方用aa.h代替呢 把交叉调用的地方都提出来,再单独建立个头文件 把aa.h与bb.h合并成ab.h,大家都可以调用。 wenyangzeng 发表于 2018-8-31 15:45
把aa.h与bb.h合并成ab.h,大家都可以调用。
这个是可以,但是我就是想知道这样调用为啥会出错,哈哈 xiaoshen-372360 发表于 2018-8-31 16:08
这个是可以,但是我就是想知道这样调用为啥会出错,哈哈
重复调用了嘛。 本帖最后由 stm1024 于 2018-8-31 18:07 编辑
因为你的头文件相互包含,会导致出现重复定义的问题,从逻辑上来说,并没有问题,但是在编译过程中,如果先变异了aa,然后在去编译bb的时候,发现引用了aa,编译器又会跑去编译aa,这就带来了重复编译的问题。
通常的方案是做头文件保护。
做如下处理:
在aa.h头文件中开头加上:
#ifndef __AA_H
#define __AA_H
然后在最后面加上一行:
#endif
同样,在BB.h头文件中做同样的操作。
如果你仔细看stm32的官方标准库文件,会发现都会做这种操作。
七楼说得对,不过我在猜想你是不是在aa文件中的a函数调用bb文件中的b函数,然后又在bb文件中的b函数调用aa文件中的a函数,好像有点绕。这样的话编译没有问题,只会一直循环运行 显然你是重复定义的问题,循环调用错误的话,会重复编译,看来这方面的语句还是要多看看
页:
[1]