[STM32N6] 如何在STM32CubeIDE中让两个头文件互相包含?

[复制链接]
 楼主| 内核558 发表于 2025-7-17 22:22 | 显示全部楼层 |阅读模式
使用STM32CubeIDE,现在遇到的问题是:有两个头文件需要互相包含,但当我这样做时,编译器提示我在一个头文件中定义的typedef struct存在类型冲突。我已经在每个头文件中使用了以下预处理语法:
"
#ifndef Header_H
#define Header_H
#endif
"
但这种方法没有效果。有人知道如何解决这个问题吗?

公羊子丹 发表于 2025-7-25 07:26 | 显示全部楼层
互相包含要用前向声明,光 #ifndef 不行,要 struct 提前声明下。
周半梅 发表于 2025-7-25 07:27 | 显示全部楼层
你在一个头文件里把 typedef struct 全展开,另一个用 struct XXX; 引用就行了。
帛灿灿 发表于 2025-7-25 07:28 | 显示全部楼层
这问题 C 里挺常见的,尤其是结构体里有指针指向对方的时候。
童雨竹 发表于 2025-7-25 07:29 | 显示全部楼层
#ifndef 只是防止重复包含,没法解决类型先后定义的依赖。
万图 发表于 2025-7-25 07:30 | 显示全部楼层
可以把公共结构体提出来放一个独立头文件,两个都去包含这个公共头。
Wordsworth 发表于 2025-7-25 07:30 | 显示全部楼层
我以前就是这么做的,把交叉依赖拆出来,再用前向声明。
Bblythe 发表于 2025-7-25 07:31 | 显示全部楼层
如果用 C++,class 也能用 class Foo; 这种前向声明,差不多原理。
Pulitzer 发表于 2025-7-25 07:32 | 显示全部楼层
千万别在头文件里写太多实现,类型最好只声明。
Uriah 发表于 2025-7-25 07:33 | 显示全部楼层
把你的 struct 名字发出来,我可以帮你写个示例哈!
Clyde011 发表于 2025-7-25 07:34 | 显示全部楼层
CubeIDE 编译器跟普通 GCC 一样,都是老 C 的这一套套路,别怕!
643757107 发表于 2025-7-25 12:25 | 显示全部楼层
没试过这个操作。
643757107 发表于 2025-7-25 12:27 | 显示全部楼层
使用 extern 声明变量(推荐)
步骤
在 a.h 中声明变量,在 a.c 中定义变量

在 b.h 中使用 extern 引用 a.h 的变量

反之亦然
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部