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

相关文章
方法:如何一次性把大量号码一键导入手机通讯录?
第一步:一堆大量号码一键导入手机通讯录,需要借助软件,金芝号码提取导入助手。第二步:在电脑上打开你的表格,里面的大量号码你先复制好,如果有对应的铭字你也复制好,然后分别粘贴进前面说的软件,接着你点软件上的“通讯录转换”,就可以得到一个通讯录文件。第三步:你从电脑上把这个文件发给你的手机,在手机上打开,就可以一键批量把大量号码导入通讯录。电脑文件怎么发送给手机,这个很容易呀,你的电脑上不是有电脑Q或者电脑微吗?发给你的手机微或者手机q就ok了,多方便!
方法:如何一次性把大量号码一键导入手机通讯录?
|
2月前
|
数据安全/隐私保护
支付系统18--------支付宝支付,支付调用流程,用时序表进行展示,三大用户用户,商户系统,支付宝,支付宝怎么知道跳转我们商户平台的那个页面,发送支付请求的时候,就携带着功的页面的参数,完整交易流
支付系统18--------支付宝支付,支付调用流程,用时序表进行展示,三大用户用户,商户系统,支付宝,支付宝怎么知道跳转我们商户平台的那个页面,发送支付请求的时候,就携带着功的页面的参数,完整交易流
|
4月前
|
小程序 测试技术 API
外卖小程序实战-接单后小票机自动打印订单
外卖小程序实战-接单后小票机自动打印订单
119 0
|
10月前
微信引用撤回发送给出神秘代码
微信引用撤回发送给出神秘代码
|
SQL 存储 自然语言处理
晚上8点在地铁上收到boss需求:把400多张表的关系画出来明早客户要!
晚上8点在地铁上收到boss需求:把400多张表的关系画出来明早客户要!
晚上8点在地铁上收到boss需求:把400多张表的关系画出来明早客户要!
|
API
电商收付通系列③,对微信应答或回调进行签名验证
如果验证商户的请求签名正确,微信支付会在应答的HTTP头部中包括应答签名。建议商户验证应答签名。同样的,微信支付会在回调的HTTP头部中包括回调报文的签名。商户必须验证回调的签名,以确保回调是由微信支付发送。这里我们就要用到在电商收付通系列②,获取微信支付平台证书获取的微信支付平台证书中的公钥。再次提醒,应答和回调的签名验证使用的是微信支付平台证书,不是商户API证书。使用商户API证书是验证不过的。
266 0
电商收付通系列③,对微信应答或回调进行签名验证
老板丢给我一堆电话号码,让我挨个进行归属地、运营商查询
老板丢给我一堆电话号码,让我挨个进行归属地、运营商查询
老板丢给我一堆电话号码,让我挨个进行归属地、运营商查询
网站空壳主体各省注销方式
网站空壳主体各省注销方式https://www.20200824.com
455 0
网站空壳主体各省注销方式
|
供应链
上海还会再封吗?你的618快递包裹到得了吗?
618时期恰逢解封复工,很多人又问:“我618买的那么多快递是不是能发了?什么时候能收到?”
159 0
上海还会再封吗?你的618快递包裹到得了吗?
“打工人”都在用的邮件使用规范
对于初入职场的新人,当遇到什么事情需要邮件处理的时候肯定是懵的,想起自己当初也是,经过一段时间的学习和实践,总结了一套使用规范和需要注意的点,分享给打工人。
313 0
“打工人”都在用的邮件使用规范