【C语言】extern 关键字
?write in front? ?大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流? ?2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家博主 & 星级博主~掘金⇿InfoQ~51CTOP创作者~周榜109﹣总榜883⇿全网访问量35w+? ?本文由 謓泽 原创 CSDN首发?如需转载还请通知⚠ ?个人主页-謓泽的博客_CSDN博客 ? ?欢迎各位→点赞? + 收藏⭐️ + 留言? ?系列专栏-【C语言】关键字_謓泽的博客? ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本?
⑩② extern ⇿ 外部声明 ⒈描述⇢extern 变量称之为外部存储变量。 ⒉定义⇢extern 在声明了此程序当中将要用到但尚未定义的外部变量。 ⒊注意⇢通常,外部存储类型都用于声明在另一个转换但又中定义变量。
int a; //声明,也是定义。
extern int a; //声明,不是定义,告知编译器你等下我是有这个变量的
?定义⇢本质就是开辟空间,定义只能有一次。 ?声明⇢告知,现在这个变量已经在某个地方已经定义好了,你现在不用定义了。前期的时候先不用管它,等下告知编译器我后面会定义这个变量的(声明可以多次)
#include <stdio.h>
//外部变量声明
extern int x;
extern int y;
int addtwonum()
{
return x+y;
}
//全局变量的声明
int x = 1;
int y = 2;
int main(void)
{
int result;
result = addtwonum();
printf("result = %d\n",result);
return 0;
}
运行结果? result = 3 拓展知识点如下? ㈠在所有的函数外部定以的变量叫做-全局变量。 ㈡全局变量是可以在整个程序当中进行使用的。 ㈢当然在程序当中我们尽量在代码当中少用到全局变量比较。 ㈣注意⇢当局部变量和全局变量同名的话,局部变量的使用优先。 那么如果我们没有加入extern 外部存储变量程序运行的时候会发生什么。如下所示↓
#include <stdio.h>
int x = 1;
int y = 2;
int addtwonum()
{
return x+y;
}
int main(void)
{
int result;
result = addtwonum();
printf("result 为: %d\n",result);
return 0;
}
?代码说明⇢如果程序是这样的话即使我们没有用 extern 外部存储变量,程序也是可以运行成功的。因为我们在前面已经定义了全局变量了。 那么下面再举出一个例子,我们实现Add()函数用 extern() 外部声明变量来实现。 test.c 文件
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
extern Add(int x, int y);
int main(void)
{
int x = 20;
int y = 30;
int ret = Add(x, y);
printf("ret = %d\n", ret);
return 0;
}
Add.c文件
#define _CRT_SECURE_NO_WARNINGS 1
int Add(int x, int y)
{
return x + y;
}
编译运行结果? ret = 50
最后⇢我们还需要在注意一点,声明并不代表开辟了空间。如果我们只是声明了的话却没有进行定义也是不可以的? 注⇥在.h当中变量的声明必须带上extern!函数的声明可以带也可以不带extern.一般你这么定义函数那么你就在.h文件当中怎么去进行声明即可。 ?拓展⇢一般来说用<>包括的是C语言当中的头文件或者是库函数当中的头文件," "是自己使用自己所自定义的头文件[约定俗称的规矩],实际上.c源文件,我们只需要在.h头文件当中加上去就可以了。而源文件可以直接不需要的指代头文件。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
extern int x = 1;
int main(void)
{
printf("%d",x);
return 0;
}
在上述代码当中就是声明变量却没有进行变量的定义,一句话『声明并没有开辟空间』 ?模块化extern的使用
?说明↔通过上述代码可以证明变量和函数是可以进行跨文件的访问的。
相关文章
- Java编程中忽略这些细节,Bug肯定找上你
- 9个问题,带你掌握流程控制语句中的java原理
- 从IDC Marketscape报告看区块链政务数字化未来:权威解读新热点、新机遇
- chatGPT的火爆,并不偶然
- React 开发 | 常用 Hooks
- JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了【JDK12特性讲解】
- Eolink 让我“重新认识“了自动化测试...
- 老板:你也把咱们网站弄成灰色——网站变灰色如何实现
- iptables规则案例
- ‘极锐’-一种新的锐化算法
- PS/LR滤镜插件套装 Nik Collection v5.3.0 Win/Mac
- Chrome插件:uBlock Origin – Chrome浏览器高效低占用的广告拦截插件
- 前端与区块链
- 云原生之微服务
- 集群动态环境管理神器 Modules
- 记 os_object_release Crash 排查
- 记 libAccessibility 通知 Crash 排查
- Ant Design Pro 中 点击子菜单的时候,其他菜单不自动收起来
- ETC 可视化
- 1267-Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLIC for o...