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

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

原因:

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

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

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

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

相关推荐
fffzd2 天前
STM32:时钟树与时钟源
单片机·嵌入式硬件·嵌入式软件·时钟树·时钟源
fffzd3 天前
STM32:IIC与温湿度传感器(轮询模式)
stm32·单片机·嵌入式硬件·iic·通信·嵌入式软件·i2c
都在酒里4 天前
FreeRTOS 综合实战:串口命令控制 LED 闪烁模式与系统监控
stm32·单片机·嵌入式硬件·嵌入式·rtos·嵌入式软件
都在酒里5 天前
FreeRTOS 手动移植教程(七):软件定时器 —— 不占硬件 Timer 的定时回调
stm32·单片机·嵌入式·rtos·嵌入式软件
都在酒里5 天前
FreeRTOS 手动移植教程(八):中断管理 —— 优先级、临界区与任务通知
stm32·单片机·嵌入式·rtos·嵌入式软件
都在酒里6 天前
FreeRTOS 手动移植教程(五):信号量 —— 任务同步与中断通知的优雅解决方案
stm32·单片机·rtos·嵌入式软件
Plankton_Li13 天前
嵌入式国密加密:STM32L4 + MIRACL 库实现 SM2 加解密
stm32·单片机·嵌入式软件
smalming16 天前
【产品开发】空气波按摩器的一些控制逻辑
嵌入式硬件·嵌入式软件
螺丝钉的扭矩一瞬间产生高能蛋白1 个月前
QT的C++接口基础用法
c++·qt·嵌入式软件·嵌入式linux·linux应用
CC城子1 个月前
嵌入式Linux宕机问题GDB调试(一)
gdb·嵌入式软件