c语言:关键字(二):extern和static

您所在的位置:网站首页 static与非static c语言:关键字(二):extern和static

c语言:关键字(二):extern和static

#c语言:关键字(二):extern和static| 来源: 网络整理| 查看: 265

关键字 一.最会帽子的关键字—extern二.最名不符实的关键字—static 在这里插入图片描述

一.最会帽子的关键字—extern

首先这里问两个问题

1.变量可以跨文件访问吗? 2.函数可以跨文件访问吗?

答案是都可以

那么什么是跨文件呢? 在这里插入图片描述在这里插入图片描述

我在game.c里定义show函数,但在test.c里依然可以调用

那么变量呢

在这里插入图片描述在这里插入图片描述

很明显这里是不能够直接调用的,那么我们可不可以调用呢?

在这里插入图片描述

extern这个关键词就是提供声明的,既然是声明那么我们可不可以给它赋值呢?

在这里插入图片描述

这里很明显是不能的。声明并没有开辟空间,而=100是赋值或者初始化必须开辟空间,很明显是不能够的

故所有的变量在声明时不能设置初始值

这里我们可以看到声明有点多了,那我们就在建一个新源文件来存放声明

在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

我们将所有声明和头文件放入test.h中,这样是不是更简洁呢,这在项目中是尤为重要的,可以看出当代码数量越多,这种方式就越有利

需要说明的是之前的show函数没有声明也可以使用,是因为编译器会自动将定义认为声明,但这种习惯并不好,所以我们遇到函数和变量都进行声明

ps:为什么编译器不把变量的定义看作声明呢,其实很简单,像是int a;如果你不加extern,那么编译器怎么知道你是在定义还是声明呢?(注意我们这里所说的都是跨文件使用变量和函数,如果在一个文件里可以看看以下博客) 函数变量的声明

二.最名不符实的关键字—static

在这里插入图片描述

从上可以看出,我们定义的全局变量和函数可以在所有文件中被访问,如果我们不想让它被所有文件访问,而仅仅让这一个文件中被访问,该怎么办呢?

那么得使用static啦

在这里插入图片描述

在这里插入图片描述

这样的话那么在test.c文件中就没有a这个变量了,那么再去调用自然就会出错啦 以上是static的第一个功能

接下来介绍第二个功能 在这里插入图片描述在这里插入图片描述

这里就很明显了使用static修饰局部变量后,编译器不会销毁i,而是继续保存

结论 1.static修饰全局变量和函数时,只能在本文件内访问,不能直接跨文件访问

2.static修饰局部变量修改其生命周期(也就是将其变为全局变量的生命周期,在全局内不会被销毁)

ps:这只是在生命周期的角度(不会被销毁),但依然不能像全局变量那样在这个文件中随意使用。

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3