当前位置: 首页 > news >正文

c语言:关键字(二)

关键字

  • 一.声明的关键词—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:这只是在生命周期的角度(不会被销毁),但依然不能像全局变量那样在这个文件中随意使用。

在这里插入图片描述

相关文章:

  • 一文解决IDEA中文乱码问题
  • 调节盘的三维建模及加工工艺规程设计
  • NumPy数组维度
  • 国产API管理神器Eolink也太强了吧
  • 智慧交通的待解谜题,中科视语在首届昇腾AI创新大赛交出金奖答案
  • 仿QQ音乐(HTML+CSS)
  • java计算机毕业设计跑腿管理系统源程序+mysql+系统+lw文档+远程调试
  • 【代码随想录训练营】Day57-动态规划
  • 码云线上误删主项目文件夹的恢复
  • Maiores incidunt cupiditate reprehenderit.Ipsam doloribus in.
  • Python内置函数(55)——round
  • 《C++语言程序设计》大作业(三个模块)
  • R语言使用lightgbm包构建多分类的LightGBM模型、使用predict函数和训练好的模型进行预测推理、将推理后的概率值转化为预测标签
  • 计算机毕业设计Java企业售后服务管理系统(源代码+数据库+系统+lw文档)
  • Day19 | 每天五道题
  • 02.java课复习
  • 深入理解ReentrantReadWriteLock源码
  • 【C++基础】 MyArray 自己实现动态数组 类模板
  • JavaScript中常用的高阶函数
  • 快来给你的宠物视频加个表情特效吧
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉