你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于头文件交叉引用的问题

[复制链接]
shenxiaolin_mai 提问时间:2018-8-31 15:13 /
事情是这个样子的,我有几个结构体想用,但是在不同的文件里面aa.h和bb.h都是原来写好的程序,
aa.h调用了bb.h,但是现在bb.h想用aa.h的东西,一调用aa.h就会报错,而且命名定义了的东西也会报错。这是为什么?



微信截图_20180831150939.png

收藏 评论8 发布时间:2018-8-31 15:13

举报

8个回答
随风飘扬 回答时间:2018-8-31 15:25:06
把源文件中所有调用bb.h的地方用aa.h代替呢

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wudianjun2001 回答时间:2018-8-31 15:31:18
把交叉调用的地方都提出来,再单独建立个头文件
wenyangzeng 回答时间:2018-8-31 15:45:44
把aa.h与bb.h合并成ab.h,大家都可以调用。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

shenxiaolin_mai 回答时间:2018-8-31 16:08:53
wenyangzeng 发表于 2018-8-31 15:45
把aa.h与bb.h合并成ab.h,大家都可以调用。

这个是可以,但是我就是想知道这样调用为啥会出错,哈哈
wenyangzeng 回答时间:2018-8-31 16:09:53
xiaoshen-372360 发表于 2018-8-31 16:08
这个是可以,但是我就是想知道这样调用为啥会出错,哈哈

重复调用了嘛。

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

STM1024 回答时间:2018-8-31 16:10:32
本帖最后由 stm1024 于 2018-8-31 18:07 编辑


因为你的头文件相互包含,会导致出现重复定义的问题,从逻辑上来说,并没有问题,但是在编译过程中,如果先变异了aa,然后在去编译bb的时候,发现引用了aa,编译器又会跑去编译aa,这就带来了重复编译的问题。
通常的方案是做头文件保护。

做如下处理:
在aa.h头文件中开头加上:
#ifndef __AA_H
#define __AA_H
然后在最后面加上一行:
#endif

同样,在BB.h头文件中做同样的操作。

如果你仔细看stm32的官方标准库文件,会发现都会做这种操作。



评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

子曰好人 回答时间:2018-8-31 17:01:39
七楼说得对,不过我在猜想你是不是在aa文件中的a函数调用bb文件中的b函数,然后又在bb文件中的b函数调用aa文件中的a函数,好像有点绕。这样的话编译没有问题,只会一直循环运行

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

feixiang20 回答时间:2018-9-1 00:21:46
显然你是重复定义的问题,循环调用错误的话,会重复编译,看来这方面的语句还是要多看看

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版