extern怎么使用,如何理解???

2024-09-17 - 笔记 - 10

extern ->可链接具有外部链接属性的变量

① 可以在一个源文件中使用另一个源文件中的某个变量

test1.c 如下 - text1文件中定义 g_val 全局变量

 #define CRT SECURE_NO WARNINGS
 //全局变量
 int g_val = 2022; 外部链接属性(整个程序都可使用)
 //不要写成 static int g_val,否则就会变成内部链接属性(只有在这个作用域内可以使用),这样其他的源文件就不可以使用这个全局变量了

test2.c 如下 -text2文件中声明后,使用text1中的 g_val 全局变量

 extern int g_val;
 int main()
 printf( "%d\n", g_val );
 return 0;

捋一遍思路:首先在 text2.c 中声明 text1 中的全局变量(g_val),然后才在 text2.c 中使用 g_val全局变量

就是在一个源文件中用 extern 声明了某全局变量 就可以使用另一个源文件中的该全局变量了。

② 函数中使用

第 1 种 函数中 使用

单文件

然而,如果全局变量不在文件的开头定义,有效的作用范围将只限于其定义处到文件结束。(那如何在声明之前就使用呢?那就必须在前面写 extern 了,声明外部变量) 如果在定义之前的函数想引用该全局变量,则应该在引用之前用关键字 extern 对该变量作“外部变量声明”,表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。 –> 意思就是无论在程序的任何位置定义的全局变量,如果你想在定义这个变量之前去使用,就需要在这之前使用 extern 声明一下,这样计算机才会知道。 例:

 #include <stdio.h>
 int sum(int x,int y);
 int main(void)
 {
     int result;
     /*全局变量声明*/
     extern int a;
     extern int b;
     res = sum(a,b);
     printf("sum=%d\n",res);
     return 0;
 }
 /*定义两个全局变量*/
 int a = 2;
 int b = 3;
 int max(int x, int y)
 {
     return x+y;
 }

代码中,全局变量a 与 b是在 main 函数之后声明的,因此它的作用范围不在 main 函数中。如果我们需要在 main 函数中调用它们,就必须使用 extern 来对变量 a 与 b作“外部变量声明”,以扩展全局变量的作用域。也就是说,如果在变量定义之前要使用该变量,则应在使用之前加 extern 声明变量,使作用域扩展到从声明开始到本文件结束。

多文件

操作方法与单文件一样,在变量前加全局变量声明extren即可。 例:

/全局变量声明/

 extern int a;
 extern int b ;

不过,需要特别注意的是,由于用 extern 引用外部变量,可以在引用的模块内修改其变量的值,因此,如果有多个文件同时要对应用的变量进行操作,而且可能会修改该变量,那就会影响其他模块的使用。因此,我们要慎重使用。

原文链接:每天一个小知识—C语言基础(一)全局变量、局部变量、extren_exern局部变量-CSDN博客

第 2 种 函数中 使用

test1.c

 int sum( int num1, int num2 )
 {
     return num1 + num2;
 }

test2.c

 extern int sum( int num1, int num2 );//这样就可以声明本工程中的其他源文件中的sum函数了,就能使用了
 int main()
 {
     int a = 10;
     int b = 20;
     int z = sum( a, b );
     printf( "%d\n", z );
 }

理解: 和将extern用在变量的效果一样,都是利用extern来使用具有外部链接属性的全局变量(不用static来定义的全局变量),如果那个全局变量前面使用的 static 的话,那么就是 内部链接属性了,就不可以使用 extern 来使用 本源文件或者其他源文件中的 全局变量了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值