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,后续调用保留之前的值,因此每次调用递增,实现了计数功能。
热门推荐
拔牙矫正真的会后悔一辈子吗?深度解析正畸拔牙利弊,这些人群千万别跟风
车辆违章的扣分规则是什么?如何避免和处理车辆违章?
生活中大部分物质都会热胀冷缩,水也是吗?
木槿花的象征意义是什么?木槿花代表了哪些文化含义?
一站式搞定全球关税查询:外贸人必备工具详解
从一个特殊的日食记录谈起——兼谈干支纪日
学习物理应重视实验
狗狗尿路感染的症状及治疗
公民的个人信息被泄露会带来什么危害
香港何文田:首个“花园城市”的前世今生
虾类挑选烹饪大揭秘,看完秒变吃虾行家!
FPGA开发:从基础到应用的全面指南
买房要交哪些钱?一文搞懂购房费用
团队如何开拓业务
电子银行承兑汇票如何提升企业交易效率?
一文搞懂”达格列净、恩格列净和卡格列净“ 列净家族三兄弟
《9号秘事第二季》第5集:一个关于洁癖与家庭的故事
一个恒星寿命是多久?低质量达上千亿年,超大质量数百万年
儒释道三家的核心思想:无咎、无我、无为
电风扇叶片为啥非得是单数?
图解 TCP 四次挥手|深度解析|为什么是四次|为什么要等2MSL
AC/DC:这支硬摇滚乐队的名字从何而来?
千年歌圩的"民族风"与"国际范"
什么是植物组织培养?它如何改变苗木培育行业?
自驾出行如何选?纯电、混动、增程大比拼
一箭多星技术突破:中国团队创新打造“星链”
基于NB-loT的渔业水质监控系统设计与实现
中国学者破解水产养殖“三难困境”,提出可持续发展新方案
阿斯:现代足球已成为营销战场,球员通过自身形象创造巨大价值
20-24度穿衣指南:如何选择服装和搭配技巧