[STM32F1] 在.h 文件中定义变量并在 main.c 中引用的问题

[复制链接]
113|6
SocialButterfly 发表于 2025-11-5 13:48 | 显示全部楼层 |阅读模式
我有一个 main.c 文件和一个 main.h 文件,main.c 中包含了 main.h。
如果我在 main.h 中写入:const uint16_t dacValues [NUMBER_MSMNTS] = {273, 769, 1390, 2631};
然后在 main.c 中使用这个变量,会出现一个错误,错误信息如下:./Core/Src/stm32l4xx_hal_msp.o:D:/STM32_FW/SWS-SIPM-01/Debug/../Core/Inc/main.h:93: multiple definition of `dacValues'; ./Core/Src/main.o:D:/STM32_FW/SWS-SIPM-01/Debug/../Core/Inc/main.h:93: first defined here
当然,把这个变量移到 main.c 中就不会报错了。

七毛钱 发表于 2025-11-5 15:35 | 显示全部楼层
通常是因为头文件被多个源文件包含,导致数组被多次定义。
内政奇才 发表于 2025-11-5 16:36 | 显示全部楼层
用extern声明,将定义放在一个源文件中。
才没有脸红 发表于 2025-11-5 18:37 | 显示全部楼层
在头文件中声明变量为extern,然后在main.c中定义该变量。
故里说长安 发表于 2025-11-5 19:38 | 显示全部楼层
头文件被多次包含导致的
茉璃夏 发表于 2025-11-5 20:39 | 显示全部楼层
const变量默认具有静态存储期,且在C语言中默认具有外部链接性。这意味着它会被暴露到全局符号表中,导致重复定义。
豌豆爹 发表于 2025-11-5 20:40 | 显示全部楼层
推荐用extern声明加单一定义
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

66

帖子

0

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