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;
}
相关推荐
于越海9 分钟前
材料电子理论核心四个基本模型的python编程学习
开发语言·笔记·python·学习·学习方法
代码方舟14 分钟前
Java后端实战:构建基于天远手机号码归属地核验的金融级风控模块
java·大数据·开发语言·金融
wuk99821 分钟前
基于MATLAB实现栅格地图全覆盖移动路径规划
开发语言·matlab
幽络源小助理41 分钟前
PHP虚拟商品自动发卡系统源码 – 支持文章付费阅读与自动发货
开发语言·php
故事不长丨1 小时前
C#集合:解锁高效数据管理的秘密武器
开发语言·windows·c#·wpf·集合·winfrom·字典
superman超哥1 小时前
Rust 内部可变性模式:突破借用规则的受控机制
开发语言·后端·rust·rust内部可变性·借用规则·受控机制
豆沙沙包?1 小时前
2026年--Lc329-735. 小行星碰撞(栈)--java版
java·开发语言
weibkreuz1 小时前
收集表单数据@10
开发语言·前端·javascript
灵哎惹,凌沃敏2 小时前
FreeRTOS 任务上下文切换核心函数:xPortPendSVHandler详解
c语言·arm开发
liulilittle2 小时前
XDP VNP虚拟以太网关(章节:一)
linux·服务器·开发语言·网络·c++·通信·xdp