C语言中extern关键字详解作者华清远见武汉华嵌技术支持曹伟东内容.doc

C语言中extern关键字详解作者华清远见武汉华嵌技术支持曹伟东内容.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言中extern关键字详解作者华清远见武汉华嵌技术支持曹伟东内容.doc

C语言中extern关键字详解 作者:华清远见武汉华嵌 技术支持 曹伟东 内容清单: 1. 用extern声明外部变量 (1)在一个文件内声明的外部变量 (2)在多个文件中声明外部变量 (3)在多个文件中声明外部结构体变量 2. 用extern声明外部函数 3. 总结 用extern声明外部变量 定义:外部变量是指在函数或者文件外部定义的全局变量。外部变量定义必须在所有的函数之外,且只能定义一次。 在一个文件内声明的外部变量 作用域:如果在变量定义之前要使用该变量,则在用之前加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 %d\n,result); return 0; } int X = 10; //定义外部变量 int Y = 20; int max(int x, int y) { return (xy ? x : y); } 其中,用extern声明外部变量时,类型名可以省略。例如,“extern int X;”,可以改写成“extern X;”。 小结:这种用方法简单,实用性不大。 在多个文件中声明外部变量 作用域:如果整个工程由多个文件组成,在一个文件中想引用另外一个文件中已经定义的外部变量时,则只需在引用变量的文件中用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 = %d\n,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;ix;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引用外部变量,可以在引用的模块内修改其值,而形参值传递的变量则不能修改其值,除非是地址传递。 因此,如果多个文件同时对需要应用的的变量进行同时操作,可能会修改该变量,类似于形参的地址传递,从而影响其他模块的使用,因此,要慎重使用。 在多个文件中声明外部结构体变量 前面一节中,只是适合一般变量的外部声明,但是对于声明外部结构体变量时,则有些不同,需要加以注意。 例子: 文件a.c的内容: #include stdio.h #include b.h #include c.h A_class local_post={1,2,3}; //全局变量 A_class next_post={10,9,8}; //全局变量 int main(int argc,char *argv[]) { A_class ret; print(first point,local_post); print(second point,next_post); ret=

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档