[STM32F1] 该如何正确声明全局变量?

[复制链接]
448|55
hudi008 发表于 2026-2-11 20:26 | 显示全部楼层
新版本可能使用了更新的GCC工具链,对C标准的遵循更严格
updownq 发表于 2026-2-12 11:21 | 显示全部楼层
每个包含该头文件的 .c 文件都会生成一份 global_var1 的定义
i1mcu 发表于 2026-2-12 11:46 | 显示全部楼层
作用域与声明方式冲突              
mattlincoln 发表于 2026-2-12 12:34 | 显示全部楼层
变量在多个源文件中定义。              
zerorobert 发表于 2026-2-12 14:11 | 显示全部楼层
添加 -fcommon 编译选项
chenci2013 发表于 2026-2-12 14:58 | 显示全部楼层
旧写法违反 C 语言 “单定义规则”,新版 IDE 编译器检查更严格,触发重复定义错误
sdlls 发表于 2026-2-12 15:21 | 显示全部楼层
旧版本可能因 GCC 默认使用 -fcommon 选项将未初始化全局变量视为“弱符号”而侥幸链接成功,但这是非标准、不可靠的行为。
mmbs 发表于 2026-2-12 16:31 | 显示全部楼层
所有头文件都要有#ifndef/#define/#endif
sanfuzi 发表于 2026-2-12 19:54 | 显示全部楼层
建议采用标准 extern 方案。
pmp 发表于 2026-2-12 21:11 | 显示全部楼层
头文件必须加保护宏,避免重复包含,同时将定义文件加入工程编译。
yeates333 发表于 2026-2-13 10:00 | 显示全部楼层
考虑使用结构体封装              
backlugin 发表于 2026-2-13 10:46 | 显示全部楼层
未来 GCC 可能彻底移除 -fcommon
iyoum 发表于 2026-2-13 12:12 | 显示全部楼层
用 -fcommon              
ccook11 发表于 2026-2-13 12:48 | 显示全部楼层
标准的头文件声明方式              
louliana 发表于 2026-2-13 13:28 | 显示全部楼层
STM32CubeIDE 新版本通常集成较新 GCC
macpherson 发表于 2026-2-13 16:55 | 显示全部楼层
使用static              
linfelix 发表于 2026-2-13 18:46 | 显示全部楼层
头文件用extern声明全局变量,仅在一个.c文件中定义
albertaabbot 发表于 2026-2-13 19:07 | 显示全部楼层
禁用 -fcommon?              
febgxu 发表于 2026-2-13 19:50 | 显示全部楼层
全局变量的 “定义” 与 “声明” 混淆
robincotton 发表于 2026-2-13 21:26 | 显示全部楼层
统一初始化全局变量              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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