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;
}
相关推荐
侃侃_天下2 天前
最终的信号类
开发语言·c++·算法
echoarts2 天前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Aomnitrix2 天前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
每天回答3个问题2 天前
UE5C++编译遇到MSB3073
开发语言·c++·ue5
伍哥的传说3 天前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
小莞尔3 天前
【51单片机】【protues仿真】基于51单片机的篮球计时计分器系统
c语言·stm32·单片机·嵌入式硬件·51单片机
小莞尔3 天前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
liujing102329293 天前
Day03_刷题niuke20250915
c语言
我是菜鸟0713号3 天前
Qt 中 OPC UA 通讯实战
开发语言·qt
JCBP_3 天前
QT(4)
开发语言·汇编·c++·qt·算法