[STM32F1] 关于结构体声明的错误

[复制链接]
710|12
yunfu1117 发表于 2025-9-21 20:02 | 显示全部楼层 |阅读模式
版本迁移通过使用 "extern" 解决了多个错误,但仍有部分关于结构体声明的错误。

对于变量和函数,使用 "extern" 可以解决错误。在 GCC 10 中遇到了一些结构体声明相关的错误。

但对于结构体应如何解决这些错误?

公羊子丹 发表于 2025-9-22 07:21 | 显示全部楼层
结构体和变量不一样,不能只靠 extern,要先有完整定义。
周半梅 发表于 2025-9-22 07:22 | 显示全部楼层
如果只是声明,用 struct MyType;,但用之前必须在某个 .c 里有定义。
帛灿灿 发表于 2025-9-22 07:23 | 显示全部楼层
头文件里放定义会导致重复,建议用前置声明 + extern 的方式分离。
童雨竹 发表于 2025-9-22 07:24 | 显示全部楼层
GCC 10 对 C 标准更严格了,以前模糊写法现在直接报错。
万图 发表于 2025-9-22 07:24 | 显示全部楼层
你是不是把 typedef struct {...} my_t; 写在多个地方了?要统一。
Wordsworth 发表于 2025-9-22 07:25 | 显示全部楼层
建议公共头文件只写声明,具体实现放在一个源文件里。
Bblythe 发表于 2025-9-22 07:27 | 显示全部楼层
如果是跨文件访问,extern struct xxx var; 就够了,但结构体本身要有定义。
Pulitzer 发表于 2025-9-22 07:29 | 显示全部楼层
可以考虑把结构体封装进 API,不要暴露内部字段。
Uriah 发表于 2025-9-22 07:29 | 显示全部楼层
迁移时还要注意 C99 和 GNU 扩展的差异,有些写法不再兼容。
Clyde011 发表于 2025-9-22 07:30 | 显示全部楼层
贴点代码出来吧,这样大家能更快帮你定位问题。
onlycook 发表于 2025-9-22 15:20 | 显示全部楼层
结构体重复定义了。
powerantone 发表于 2025-9-22 16:21 | 显示全部楼层
可能是头文件被多次包含,导致重复编译。
stormwind123 发表于 2025-9-22 17:21 | 显示全部楼层
用头文件保护宏。
七毛钱 发表于 2025-9-22 18:22 | 显示全部楼层
结构体可能未声明。
cr315 发表于 2025-9-22 18:57 | 显示全部楼层
检查工具链兼容,所有模块使用相同的头文件版本
内政奇才 发表于 2025-9-22 19:23 | 显示全部楼层
头文件包含顺序错误?
海滨消消 发表于 2025-9-22 19:24 | 显示全部楼层
在需要使用结构体的源文件中,先包含定义结构体的头文件,再包含其他依赖头文件。
豌豆爹 发表于 2025-9-22 20:24 | 显示全部楼层
C++对类型检查更严格,若结构体在C文件中定义但未用extern "C"包裹,C++编译器无法识别。
麻花油条 发表于 2025-9-22 22:25 | 显示全部楼层
在头文件中添加extern "C"保护。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

60

帖子

0

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