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;
}
相关推荐
老虎06274 分钟前
数据结构(Java)--位运算
java·开发语言·数据结构
yanjiaweiya4 分钟前
云原生-集群管理续
java·开发语言·云原生
Swift社区5 分钟前
Swift 解 LeetCode 320:一行单词有多少种缩写可能?用回溯找全解
开发语言·leetcode·swift
写不出来就跑路10 分钟前
暑期实习感悟与经验分享:从校园到职场的成长之路
java·开发语言·经验分享·spring boot
weixin_472339466 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
枯萎穿心攻击6 小时前
响应式编程入门教程第二节:构建 ObservableProperty<T> — 封装 ReactiveProperty 的高级用法
开发语言·unity·c#·游戏引擎
Eiceblue8 小时前
【免费.NET方案】CSV到PDF与DataTable的快速转换
开发语言·pdf·c#·.net
m0_555762908 小时前
Matlab 频谱分析 (Spectral Analysis)
开发语言·matlab
学不动CV了9 小时前
ARM单片机启动流程(二)(详细解析)
c语言·arm开发·stm32·单片机·51单片机
浪裡遊9 小时前
React Hooks全面解析:从基础到高级的实用指南
开发语言·前端·javascript·react.js·node.js·ecmascript·php