在 Keil C 语言(标准 C 行为)中,如果全局变量与函数内的静态局部变量 名字相同,在该函数内部,使用的是静态局部变量。
原因:
C 语言的局部变量会遮蔽(shadow)同名的全局变量 。静态局部变量虽然生命周期长,但其作用域仍局限于函数内部,优先级高于全局变量。
如何访问被遮蔽的全局变量?
在函数内部,若仍需访问同名全局变量,可使用 ::(仅限 C++)或在 C 中只能通过全局指针 、参数传递等方式,标准 C 没有直接的作用域解析运算符。Keil C51 针对 8051 扩展中也没有直接访问的语法,需要避免命名冲突。
结论: 函数默认使用自己作用域内的静态局部变量,不会意外使用全局变量。