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 来使用 本源文件或者其他源文件中的 全局变量了