代码快递员:extern如何送达静态变量至各文件目的地

简介: 代码快递员:extern如何送达静态变量至各文件目的地

各位少年,大家好,我是博主那一脸阳光

前言:话说有一天,静态变量先生和extern女士一起去参加编程界的武林大会。静态变量先生自豪地说:“你知道我为什么这么受欢迎吗?因为我可是个低调的富翁,我在函数内部藏着金元宝(持久化存储),谁也别想偷走我的财富。”

extern女士听后掩嘴一笑:“那是因为你不知道怎么理财投资,看看我,轻轻一挥我的仙女棒(extern声明),就把你的财富带到全世界的各个角落,让所有人都能看到你的名号!”

meiy

就这样,静态变量先生明白了,原来真正的富翁不仅要懂得积累,还要学会分享和交流。从此以后,他们联手开创了代码江湖中一段段流传千古的佳话……

假设左边文件名称add.c,右边叫做test.c,左边是全局变量,我们知道全局变量作用域是程序结束,但是这是多条文件,所以这里介绍一个关键字 extern

extern 数据类型 变量名
#include<stdio.h>
extern int g_val
int main()
{
  printf("%d\n", g_val);
  return 0;
}
int g_val = 2029;

这里的extern可以想象成一个接口,extern让大家原本没有链接属性的多个文件,变得有所链接,这本段代码中exturn声明了,g

_val的全局变量,而不是创建,所以在test。c这个文件里可以直接使用,接下来推荐几个使用exturn措施。

extern不可以声明被static修饰的静态变量

extern在声明的文件中的内容与其他文件保持一致

extern可以声明函数和函数参数,但内容必须和写函数和函数参数的文件保持一致,否则无法使用

大家可能不理解,这三条语法定义的规则,我们通过代码,演示一下。

static int Add(int x,int y)
{
return x+y
}
```sc.c
#include<stdio.h>
exturn int Add(int x,int y);
int main()
{
int a=10;
int b=20;
int c=Add(a,b);
printf("%d\n",c);
return 0;
}
test.c

这段代码会报错,因为exturn无法声明static修饰的变量,大家通过上面的代码理解了,我说的三条建议性的语句。

接下来介绍三条static语句的使用规则

static修饰全局变量:

1.首先要知道全局变量是具有外部链接数学的

2.全局变量被static修饰后,外部链接属性就变成内部链接属性,就是这个全局变量,只能在自己所在的.c文件中使用,其他文件看不到。

相当于作用域变小了。

static修饰函数

1函数也是具有外部链接属性

2但是被static修饰后,外部链接属性就变成内部链接属性,这个函数只能在自己所在的.C文件中使用

其他文件中及时声明了,也不能使用。

总结

在编程的江湖中,static与extern无疑是两位举足轻重的侠客,他们各自拥有独特武艺,又默契配合,共同维护着代码世界的秩序。

static大侠深藏不露,身怀绝技。对于局部变量,他赋予其持久生命力,让它们在函数多次调用间延续记忆;而对于全局变量,他又巧妙地施加隐身术,令它们仅在当前编译单元内享有盛誉,避免了外界的干扰和纷争。静态函数亦是他的一大拿手好戏,它们悄然坚守岗位,只为局部领域提供服务,减少了全局命名空间的拥挤。

而extern女侠,则是跨文件交流的信使,她擅长编织一张无形的网络,将各编译单元中的全局变量紧紧相连。通过她的引荐,全局变量得以冲破束缚,跨越疆界,成为各大模块间信息传递的重要纽带。同时,她也不忘提携函数,让它们在不同的源文件中声名远播,为项目的整体协调和运作提供了强大支持。

总的来说,static和extern两位大侠在C语言的广阔天地中各显神通,相辅相成,共同成就了代码模块化、结构化和高效化的发展。作为开发者,我们应当善用这两大利器,精雕细琢每一行代码,打造出既稳定可靠又便于维护的优质项目。愿我们在编程的道路上,随这两者一同探寻更深层次的奥秘,书写出更多精彩的程序篇章。

相关文章
|
存储
【静态通讯录】
【静态通讯录】
45 0
|
存储
通讯录(静态版)
通讯录(静态版)
116 0
|
C语言
C/【静态通讯录】
C/【静态通讯录】
静态通讯录
C语言学习——教你学会静态通讯录的实现(保姆级教程哦~)
通讯录(静态版)(二)
大家好,有好久没有带大家一起搞实战的编程了,今天就给大家带来一个简单的通讯录小系统
80 0
|
存储
通讯录(静态版)(一)
大家好,有好久没有带大家一起搞实战的编程了,今天就给大家带来一个简单的通讯录小系统
97 0
静态版通讯录
大家好,今天我为大家带来的是静态版本的通讯录(后期也会更新更优版本的通讯录,记得关注,防止找不到了哦)。 我将通讯录分别放在三个不同的文件中,分别是test.c(用来实现代码的额整体逻辑),Contact.h(用来存放头文件和函数声明),Contact.c(函数实现的主体)。那么就随我来看看怎样实现静态版本的通讯录吧。
如何快速核对未到场的人数名字EXCEL
如何快速核对未到场的人数名字EXCEL
|
数据库 C语言
C语言课设——通讯录(静态、动态、文件三版合一)(下)
下面是不同版本的源码,文件版为重新编写的版本,在部分变量和函数命名上可能与前两个版本有差异,但底层逻辑是一致的。
98 0
C语言课设——通讯录(静态、动态、文件三版合一)(下)
|
存储 C语言
C语言课设——通讯录(静态、动态、文件三版合一)(上)
相信每个科班的同学都有过C语言课设的经历,比如教职工工资管理系统、图书信息管理系统、学生信息管理系统、通讯录系统等,其实这些课设任务的底层逻辑都是一致的,无非就是对结构体变量进行增删查改操作,同时配合文件操作将数据保存在文件夹中,本文将以通讯录举例,从静态版到文件版,让大家明白通讯录系统是如何逐步完善的。
78 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等