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

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

原因:

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

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

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

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

相关推荐
明月清了个风6 天前
libmodbus笔记
笔记·嵌入式软件·libmodbus
波特率1152007 天前
单片机启动流程以STM32举例
stm32·单片机·嵌入式硬件·嵌入式·嵌入式软件
戏舟的嵌入式开源笔记16 天前
上手RP2040(基于C SDK)
c语言·pico·嵌入式软件·rp2040
戏舟的嵌入式开源笔记17 天前
RP2040(移植FreeRTOS-SMP)
rtos·嵌入式软件
笨笨饿21 天前
42_C语言查找算法
linux·服务器·c语言·人工智能·mcu·学习方法·嵌入式软件
小向是个Der25 天前
嵌入式进阶——嵌入式MCU编译工具链总结
单片机·编译·嵌入式软件·cline+glm5.0
Lester_110125 天前
#ifndef FLOW_EXT #define FLOW_EXT extern
嵌入式软件
AF_INET61 个月前
RV1126B开发板学习篇(二)v4l2+mpp编码
c语言·经验分享·音视频·视频编解码·嵌入式软件·rv1126b
逆小舟1 个月前
【SWM320】学习使用UART
单片机·学习·嵌入式软件