static和extern

简介: `static`和`extern`是C语言的关键字。`static`用于修饰局部变量、全局变量和函数,改变它们的生命周期和作用域。局部静态变量在函数结束后不会销毁,保持其值直到程序结束。全局静态变量限制为只在当前源文件可见,减少命名冲突。`extern`则用于声明外部已定义的符号,使得在其他文件中可以访问该全局变量或函数。总的来说,`static`和`extern`影响变量和函数的可见性和存储持续时间。

static 和 extern 都是C语言中的关键字


static 是静态的的意思,可以用来:



1.修饰局部变量


2.修饰全局变量


3.修饰函数


extern是用来声明外部符号的


作用域和生命周期


作用域


作用域(scope) 是程序设计概念, 通常来说,一段程序代码中所用到的名字并不总是有效(可用) 的, 而限定这个名字的可用性的代码范围就是这个名字的作用域。


1. 局部变量的作用域是变量所在的局部范围。


2.全局变量的作用域是整个工程(项目)。


生命周期


生命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的一个时间段。


1. 局部变量的生命周期是: 进入作用域变量创建,生命周期开始,出作用域生命周期结束。


2.全局变量的生命周期是:整个程序的生命周期。


 

结果为:



计算结果都为1是因为i是局部变量,进入函数创建,出函数就销毁



结果为:




出现该结果是因为static修饰了局部变量i




static修饰局部变量:


本质上影响了变量的存储类型,一个局部变量是存在栈区的,但是被static修饰后就存放在静态区了,因为存储类型的变化,生命周期跟着变化了,变长了


使用建议:


未来一个变量出了函数后,我们还想保留值等到下次进入函数时继续使用,就可以用static修饰


结论:


static修饰局部变量改变了变量的生命周期,生命周期改变的本质是改变了变量的存储类型,本来一个局部变量是存储在内存的栈区的,但是被 static修饰后存储到了静态区。存储在静态区的变量和全局变量是一样的,生命周期就和程序的生命周期一样了,只有程序结束,变量才销毁,内存才回收。但是作用域不变的。


static修饰全局变量


extern是用来声明外部符号的,如果一个全局的符号在A文件中定义的,在B文件中想使用,就可以使用extern进行声明,然后使用



static修饰全局变量:


1. 首先要知道全局变量是具有外部链接属性的


2.全局变量被static修饰后,外部链接属性就变成了内部链接属性,就是这个全局变量只能在自己所在的. c文件中使用,其他文件看不到。


相当于作用域变小了。


static修饰函数:


1. 函数也是具有外部链接属性


2.但是被static修饰后,外部链接属性就变成了内部链接属性,这个函数只能在自己所在的. c文件中使用其他文件中及时声明了,也不能使用。


如:



目录
相关文章
|
1月前
|
C++
C总结-关键字 static const extern
C总结-关键字 static const extern
23 0
|
1月前
|
存储 C语言
static和extern详解
static和extern详解
26 0
|
11月前
静态数据static
静态数据static
33 0
|
存储 编译器 C语言
C语言关键字之extern和static
C语言关键字之extern和static
static
static
68 0
|
C++ 编译器 C语言
|
搜索推荐 C++ 存储