C语言:生命周期和作用域,static和extern

关键字static与extern

1.作用域(scope) :代码中能够访问到变量的范围(变量可以被使用的文本区间)。(分为全局作用域和局部作用域)

☺全局作用域:在整个程序中都能访问的变量。通常定义在程序开头,所有函数都能访问,一个全局变量在程序中只有一个拷贝,所以当一个函数修改了这个变量的值之后,其他函数都能看到这个新值。

☹局部作用域:通常在函数内部声明,只能在某个函数或者代码块中访问的变量。可以帮助我们限制对变量的访问,避免意外修改变量的值。

☼当在一个代码块中定义一个与全局变量同名的局部变量时,这个局部变量会隐藏全局变量,在这个代码块中,使用这个变量时会优先使用局部变量的值,不是全局变量的值。如果想改变全局变量的值,就要使用关键字extern。

2.生命周期(duration):指变量创建到变量销毁之间的一个时间段。

作用域和生命周期的区别:作用域名字的作用域是程序文本的一部分,名字在其中可见。 换句话说就是你什么时候可以看见它并找到它。 生命周期指的是程序执行过程中该对象存在的一段时间。

3.static是静态的意思:

◇修饰局部变量:普通的局部变量储存在栈区的,但是经过static修饰过的局部变量储存在静态区,在经过它的作用域(它的生命周期变了,但作用域没变)之后该变量不会被销毁,通常用来实现一些具有记忆力代码的功能。

◇修饰全局变量(函数):不能通过引用来在别的文件来使用这个变量(函数),只能在当前文件里面使用该变量(函数)全局变量不能加(auto)。

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

在函数中,不加extern,默认加了具有外部属性,加static就具有静态属性。

cpp 复制代码
add.c
int add(int x,int y)
{
	return x + y;
}
test.c
#include<stdio.h>
extern int add(int x, int y);
int main()
{ 
	printf("%d", add(2, 3));
	return 0;
}

但是如果在全局符号之前加上static,那么结果就是错误的,像下面这个例子一样。

cpp 复制代码
add.c
 static int add(int x,int y)
{
	return x + y;
}
test.c
#include<stdio.h>
extern int add(int x, int y);
int main()
{
	printf("%d", add(2, 3));
	return 0;
}
相关推荐
E***q53915 分钟前
JavaScript数据挖掘开发
开发语言·javascript·数据挖掘
Lxinccode31 分钟前
python(59) : 多线程调用大模型ocr提取图片文本
开发语言·python·图片提取文字·批量提取文件·多线程ocr
自由日记40 分钟前
python简单线性回归
开发语言·python·线性回归
程序员-周李斌41 分钟前
Java NIO [非阻塞 + 多路复用解]
java·开发语言·开源软件·nio
猪八戒1.041 分钟前
onenet接口
开发语言·前端·javascript·嵌入式硬件
h***83931 小时前
JavaScript开源
开发语言·javascript·ecmascript
Z***25801 小时前
JavaScript虚拟现实案例
开发语言·javascript·vr
Halo_tjn1 小时前
Set集合专项实验
java·开发语言·前端·python
席万里1 小时前
关于Go的init函数执行顺序#黑魔法
开发语言·网络·golang
橘子真甜~2 小时前
C/C++ Linux网络编程6 - poll解决客户端并发连接问题
服务器·c语言·开发语言·网络·c++·poll