C语言中extern关键字详解1

内容清单:

1. 用extern声明外部变量

(1)在一个文件内声明的外部变量

(2)在多个文件中声明外部变量

(3)在多个文件中声明外部结构体变量

2. 用extern声明外部函数

3. 总结

1. extern声明外部变量

定义:外部变量是指在函数或者文件外部定义的全局变量。外部变量定义必须在所有的函数之外,且只能定义一次。

(1) 在一个文件内声明的外部变量

作用域:如果在变量定义之前要使用该变量,则在用之前加extern声明变量,作用域扩展到从声明开始,到本文件结束。

例子:

#include <stdio.h>

int max(int x,int y); //函数提前声明

int main(int argc,char *argv[ ] )

{

int result;

extern int X; //外部变量声明

extern int Y;

result = max(X,Y);

printf(“the max value is %dn”,result);

return 0;

}

int X = 10; //定义外部变量

int Y = 20;

int max(int x, int y)

{

return (x>y ? x : y);

}

其中,用extern声明外部变量时,类型名可以省略。例如,“extern int X;”,可以改写成“extern X;”。

小结:这种用方法简单,实用性不大。

(2) 在多个文件中声明外部变量

作用域:如果整个工程由多个文件组成,在一个文件中想引用另外一个文件中已经定义的外部变量时,则只需在引用变量的文件中用extern关键字加以声明即可。可见,其作用域从一个文件扩展到多个文件了。

例子:

文件a.c的内容:

#include <stdio.h>

int BASE=2; //变量定义

int exe(int x); //外部函数提前声明

int main(int argc, char *agrv[])

{

int a=10;

printf(“%d^%d = %dn”,BASE,a,exe(a));

return 0;

}

文件b.c的内容:

#include <stdio.h>

extern BASE; //外部变量声明

int exe(int x)

{

int i;

int ret=1;

for(i=0;i<x;i++)

{

ret*=BASE;

}

return ret;

}

利用gcc工具编译gcc a.c b.c –o demo,再运行./demo,结果为2^10 = 1024。其中,在a.c文件中定义BASE=2,在b.c中引用BASE时,需要用extern关键字声明其为外部变量,否则编译会找不到该变量。

小结:对于多个文件的工程,可以采用这种方法来操作。实际工程中,对于模块化的程序文件,在其文件中可以预先留好外部变量的接口,也就是只采用extern声明变量,不定义变量,也通常在模块程序的头文件中声明,在使用该模块时,只需要在使用时定义一下即可,如上述b.c文件,做好相应的函数接口,留好需要改变BASE值的声明,在需要使用该模块时,只需要在调用的文件中定义具体的值即可。

引用外部变量和通过函数形参值传递变量的区别:用extern引用外部变量,可以在引用的模块内修改其值,而形参值传递的变量则不能修改其值,除非是地址传递。

因此,如果多个文件同时对需要应用的的变量进行同时操作,可能会修改该变量,类似于形参的地址传递,从而影响其他模块的使用,因此,要慎重使用。

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《C语言中extern关键字详解1
本文地址:http://www.xiupu.net/archives-580.html
关注公众号:嗅谱网

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!