全局变量与函数内的静态局部变量名字相同

在 Keil C 语言(标准 C 行为)中,如果全局变量与函数内的静态局部变量 名字相同,在该函数内部,使用的是静态局部变量

原因:

C 语言的局部变量会遮蔽(shadow)同名的全局变量 。静态局部变量虽然生命周期长,但其作用域仍局限于函数内部,优先级高于全局变量。

如何访问被遮蔽的全局变量?

在函数内部,若仍需访问同名全局变量,可使用 ::(仅限 C++)或在 C 中只能通过全局指针参数传递等方式,标准 C 没有直接的作用域解析运算符。Keil C51 针对 8051 扩展中也没有直接访问的语法,需要避免命名冲突。

结论: 函数默认使用自己作用域内的静态局部变量,不会意外使用全局变量。

相关推荐
程序员与背包客_CoderZ14 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus
xz驱动分享13 天前
Linux DMA 子系统学习笔记
linux·dma·rk3588·嵌入式软件
醉逍遥_祥22 天前
Linux进程与NuttX任务(Linux Processes vs NuttX Tasks)
linux·单片机·嵌入式软件
Funing71 个月前
FreeRTOS 学习复盘(四):事件组、软件定时器与任务通知机制
操作系统·freertos·嵌入式软件
云纳星辰怀自在1 个月前
嵌入式系统栈溢出:从幽灵Bug到精准防控的全链路指南
软件工程·嵌入式软件·栈溢出·stack溢出
阿泽·黑核2 个月前
表驱动 + 回调分发:大规模按键模块的工程实践
c语言·嵌入式软件·vibe coding·trae solo
咖喱年糕2 个月前
KEIL5 编译错误解决:MDK 5.37 及以上版本添加 AC5(ARM Compiler 5)编译器
arm开发·单片机·keil·嵌入式软件·ac5
都在酒里2 个月前
【极致低延时】香橙派部署 MediaMTX 实现 WebRTC 推流,延时仅 500-800ms,比局域网 ffmpeg 拉流快近 10 倍!(附踩坑全记录)
linux·arm开发·ffmpeg·webrtc·orangepi·嵌入式软件
fffzd2 个月前
STM32:OLED原理
stm32·单片机·嵌入式硬件·iic·oled·嵌入式软件
fffzd2 个月前
STM32:时钟树与时钟源
单片机·嵌入式硬件·嵌入式软件·时钟树·时钟源