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,后续调用保留之前的值,因此每次调用递增,实现了计数功能。
热门推荐
桂枝汤治感冒荨麻疹等8症,中医经典方剂显身手
六味中药降血压,五方良药控血糖:中医治疗需遵医嘱
6步教你更换热水器镁棒,轻松完成家庭维护
告别“关系学”:职场新人该如何建立有效人脉
职场沟通五大误区与生存法则:从HR视角解读人际关系攻略
老花眼隐形眼镜佩戴指南:从选购到日常护理全攻略
年度培训计划怎么做?需求分析、内容设计到效果评估全攻略
断崖式分手后,如何快速恢复心情?
双层玻璃VS三层玻璃:窗户选购指南
玩《黑悟空》头晕?这3个小技能,让您减少晕感,库库通关
透析后乏力?这6个原因和5种防治方法请收好
面粉添加剂风波,教你如何挑选放心面粉
警惕!面条里的硼砂竟然是致癌物?
2025宜昌新春灯会:儿童公园打造沉浸式光影盛宴
宜昌春节习俗大盘点:年味儿十足!
春节打卡三峡大坝,宜昌旅游不容错过
“会飞翔的企鹅,会潜水的鹦鹉”:海洋中的飞翔艺术家与潜水高手
“我的情绪我做主”儿童情绪管理成长小组 | 社工案例计划
中国古典文学的魅力与影响
馒头放冰箱里安全吗?食物保存的科学指南
跨学科研究揭示轮回奥秘:从量子物理到基因遗传
因果轮回:佛教如何看待生命的流转与解脱
从审美到感谢:“appreciation”的多重魅力
职场沟通必备:用"Appreciate"表达感谢的艺术
三亚到太原自驾攻略:33.8小时2811元,海南环岛高速详解
三亚到太原自驾指南:跨琼州海峡需提前预约
身心健康教育:培养积极心态,提升生活质量
小湘镇趣味运动,蛟塘镇文艺汇演迎元旦
1966年粮票身价几何?市场价仅2元引热议
一线潮、潮头相撞、回头潮:盐官镇观潮全攻略