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

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

[复制链接]
xiaoshen-372360 提问时间: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个回答
yu0405jie 回答时间: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

查看全部评分

xiaoshen-372360 回答时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版