extern和static的作用(有例子)
创作时间:
作者:
@小白创作中心
extern和static的作用(有例子)
引用
CSDN
1.
https://blog.csdn.net/2301_79461876/article/details/146379197
在C语言编程中,extern和static是两个非常重要的关键字,它们分别用于控制变量和函数的作用域和生命周期。本文将通过理论解释和代码示例,帮助读者深入理解这两个关键字的使用场景和具体作用。
一、extern
extern的作用
- 声明而非定义
extern告诉编译器某个变量或函数存在于其他地方(通常是另一个源文件),当前只是声明它,而不是定义它(分配内存)。定义只能在一个地方出现,而声明可以多次。 - 跨文件共享
它允许在多个源文件之间共享全局变量或函数,避免重复定义导致的链接错误。
例子:
1、头文件中的extern声明
文件结构:
- shared.h:头文件,包含extern声明。
- shared.c:定义全局变量和函数。
- main.c:使用头文件中的声明。
shared.c(定义)
shared.h(声明)
main.c(使用)
2、源文件中的extern声明
文件结构:
- file1.c:定义全局变量和函数。
- file2.c:使用extern声明并访问file1.c中的变量和函数。
file1.c(定义)
file2.c(声明并使用)
二、static
static在全局变量中的作用
- 链接属性(改变):
默认全局变量具有外部链接性,而static将其改为内部链接性(internal linkage),限制其作用域为当前源文件,其他文件无法通过extern访问。 - 生命周期(不变):
从程序开始运行到结束,贯穿整个程序生命周期。
static在局部变量中的作用
- 生命周期(改变):
贯穿整个程序生命周期,与程序生命周期相同,而不像普通局部变量那样随函数退出而销毁。 - 作用域(因为是局部变量,所以作用域还是在他自己的函数内部):
仍然局限于定义它的块(如函数内部),外部无法访问。
例子:分为全局变量使用和局部变量使用
1、全局变量使用static
一、不使用static情况:
解释:
- globalVar没有static,具有外部链接性。
- file2.c通过extern成功访问并修改了file1.c中的globalVar,两者共享同一变量。
二、使用static情况:
解释:
- globalVar被static修饰,具有内部链接性,仅在file1.c中可见。
- file2.c无法通过extern访问,链接器找不到globalVar的定义。
2、局部变量使用static
一、局部变量不使用static
每次调用这个函数,局部变量都会被初始化为零
解释:
- callCount是普通局部变量,存储在栈上。
- 每次countCalls()调用时,callCount重新分配内存并初始化为0,函数退出后销毁,因此每次输出都是1。
二、局部变量使用static
解释:
- callCount被static修饰,存储在静态数据区。
- 只在第一次调用时初始化为0,后续调用保留之前的值,因此每次调用递增,实现了计数功能。
热门推荐
试用期内多次迟到被辞退,仲裁委:符合法律规定
学习隶书,要把握其四个艺术特点
汉代隶书广泛流传的奥秘
从127万人到550万人:解放战争中我军兵力是如何增长的?
从127万人到550万人,解放战争中,我军兵力是如何增长的?
银行「新生成不良率」排行榜
如何在鬼谷八荒宗门大比中脱颖而出?这三大策略你必须掌握
三月份要注意了,有两种存款应抓紧取出来!
中国海洋大学重点学科名单有哪些(双一流、国家级、省级)
读懂矛盾论:让你瞬间透析事物的本质,摆脱惯性思维牢笼
探索社会悖论:揭示日常生活中的矛盾与真相
《酒精计划》:一场关于中年危机的实验性探索
特殊工种培训学校:依法合规的专业教育机构
教育培训市场需求分析
日本最低时薪涨幅创历史新高,留学生打工收入将增加
遛狗不牵绳违法怎么处理?把狗打死犯法吗?
王健林预言成真?2025年房价或将超出想象
建安文学的时代特征与历史影响
20亿美元!《哪吒2》全球屠榜,杭州动漫企业一齐撕开“天花板”
美国印第安纳州经济状况及富裕程度分析
伤口感染化脓的处理方法:从清创到包扎的全面指南
猩猩敷草药治伤,鹦鹉吃黏土排毒……它们都懂治病,我该用什么治疗工伤
邂逅羊楼洞:一块茶砖的沧桑历程
经常哭对眼睛有无益处
总哭对眼睛有危害吗?会不会伤害眼睛
灼痛的口腔溃疡,找准原因好缓解
五款冷门佳作揭秘:探索那些你未曾想象的小众游戏奇迹
曹操的崛起:以寡敌众击败黄巾军的策略与智慧
斗罗大陆:魂师对决攻略——魂师成长体系全解析
风寒感冒三个阶段及日常注意事项