【C】局部变量和全局变量及同名情况

在局部变量作用的块或者函数内,局部变量覆盖全局变量,对变量的操作只是局部变量,不对全局变量起作用。在块或者函数外部,全局变量才有作用。

定义全局变量或者静态变量tmp10

tmp10未初始化或者tmp10 = {0},则tmp内容都是0

tmp10 = {1},只有tmp1是1,后面都是0

定义局部变量tmp10

tmp10未初始化,则tmp内容都是随机数

tmp10 = {0},则tmp内容都是0

tmp10 = {1},只有tmp1是1,后面都是0

|--------|------|------|
| 类型 | 作用域 | 生命周期 |
| 局部变量 | 某个函数 | 某个函数 |
| 静态局部变量 | 某个函数 | 整个工程 |
| 静态全局变量 | 单个文件 | 整个工程 |
| 全局变量 | 整个工程 | 整个工程 |

作用域相同的变量,不能命名相同,会报错。作用域不同的变量,可以命名相同,使用时遵循就近原则。也就是局部变量可以覆盖全局变量。

C语言中,如果同名宏的定义完全相同,则没问题。如果定义的内容不同,则报错,或者告警。告警的话,使用时遵循就近原则。

全局或者静态变量初始化必须是常量表达式,局部变量初始化可以是变量。

相关推荐
一知半解仙17 分钟前
当机器人学会泛化,而我在写Java:一名后端开发者的2026年8月21日观察手记
java·开发语言·机器人
流浪00121 分钟前
C/C++ 后端筑基系列(一):C语言 —— 从基础到进阶系统指南
c语言
青 春 记 忆38 分钟前
LeetCode 155. 最小栈|Python 解法详解
开发语言·python·leetcode
剩下了什么9 小时前
float32 与 float64 精度陷阱:如何在 Go 中避免错误使用
开发语言·后端·golang
指尖时光.10 小时前
Three.js 超全入门综合案例
开发语言·javascript·ecmascript
暴力求解10 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
吴声子夜歌10 小时前
Java面试题——基础(一)
java·开发语言
小庞在加油11 小时前
WinDbg实战:QT/跨平台项目死锁与无响应问题排查指南
开发语言·qt·windbg·工具
Vae_Mars11 小时前
C#中的delegate委托
开发语言·c#
一直走下去-明11 小时前
简单的http抓包解包完整代码
开发语言·python