加载中…
个人资料
我的温柔喂过谁_q
我的温柔喂过谁_q
  • 博客等级:
  • 博客积分:0
  • 博客访问:2,784
  • 关注人气:37
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

在多文件的程序中使用extern声明外部变量以扩展其作用域到其他文件

(2012-05-02 09:15:22)
标签:

杂谈

分类: C

 一个C程序可以由一个或多个源程序文件组成。如果程序只由一个源文件组成,使用外部变量的方法在“C程序中全局变量的作用范围”一文和“在一个文件内使用关键字extern声明外部变量以扩展其作用域”一文中已经介绍。如果程序由多个源程序文件组成,那么在一个文件中想引用另一个文件中已定义的外部变量,有什么办法呢?

  如果一个程序包含两个文件,在两个文件中都要用到同一个外部变量Num,不能分别在两个文件中各自定义一个外部变量Num,否则在进行程序的连接时会出现“重复定义”的错误。正确的做法是:在任意一个文件中定义外部变量Num,而在另一文件中用extern对Num作“外部变量声明”。即

  extern Num;

  在编译和连接时,系统会由此知道Num是一个已在别处定义的外部变量,并将在另一文件中定义的外部变量的作用域扩展到本文件,在本文件中可以合法地引用外部变量Num。

  下面举一个简单的例子来说明这种引用。

  例 用extern将外部变量的作用域扩展到其他文件。

  本程序的作用是给定b的值,输入a和m,求a×b和am的值。

  1.   
  2. int A;    
  3. void main(){  
  4.    int power(int);    
  5.    int b=3,c,d,m;  
  6.    printf("enter number and its power m:\n");  
  7.    scanf("%d,%d",&A,&m);  
  8.    c=A*b;  
  9.    printf("%d*%d=%d\n",A,b,c);  
  10.    d=power(m);  
  11.    printf("%d^%d=%d\n",A,m,d);  
  12.  
  13.   
  14.   
  15. extern A;    
  16. power(int n){  
  17.    int i,y=1;  
  18.    for(i=1;i<=n;i++) y*=A;  
  19.    return(y);  
  20.  

  可以看到,file2.c文件中的开头有一个extern声明,它声明在本文件中出现的变量A是一个已经在其他文件中定义过的外部变量,本文件不必再次为它分配内存。本来外部变量A的作用域是file1.c,但现在用extern声明将其作用域扩大到file2.c文件。假如程序有5个源文件,在一个文件中定义外部整型变量A,其他4个文件都可以引用A,但必须在每一个文件中都加上一个“extern A;”声明。在各文件经过编译后,将各目标文件联接成一个可执行的目标文件。

  但是用这样的全局变量应十分慎重,因为在执行一个文件中的函数时,可能会改变了该全局变量的值,它会影响到另一文件中的函数执行结果。

  有的读者可能会问:extern既可以用来扩展外部变量在本文件中的作用域,又可以使外部变量的作用域从一个文件扩展到程序中的其他文件,那么系统怎么区别处理呢?实际上,在编译时遇到extern时,先在本文件中找外部变量的定义,如果找到,就在本文件中扩展作用域。如果找不到,就在连接时从其他文件中找外部变量的定义,如果找到,就将作用域扩展到本文件。如果找不到,按出错处理。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有