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;
}
相关推荐
Boilermaker199230 分钟前
【Java EE】Mybatis-Plus
java·开发语言·java-ee
aramae36 分钟前
C++ -- STL -- vector
开发语言·c++·笔记·后端·visual studio
Tony小周36 分钟前
实现一个点击输入框可以弹出的数字软键盘控件 qt 5.12
开发语言·数据库·qt
lixzest1 小时前
C++ Lambda 表达式详解
服务器·开发语言·c++·算法
沉默媛1 小时前
如何安装python以及jupyter notebook
开发语言·python·jupyter
_Chipen2 小时前
C++基础问题
开发语言·c++
止观止2 小时前
JavaScript对象创建9大核心技术解析
开发语言·javascript·ecmascript
阿捏利4 小时前
C Primer Plus 第6版 编程练习——第7章(上)
c语言·编程题·c primer plus
screenCui4 小时前
macOS运行python程序遇libiomp5.dylib库冲突错误解决方案
开发语言·python·macos
linux kernel4 小时前
第七讲:C++中的string类
开发语言·c++