Chinaunix首页 | 论坛 | 博客
  • 博客访问: 928557
  • 博文数量: 146
  • 博客积分: 3321
  • 博客等级: 中校
  • 技术积分: 1523
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-29 10:32
文章分类

全部博文(146)

文章存档

2014年(2)

2013年(5)

2012年(4)

2011年(6)

2010年(30)

2009年(75)

2008年(24)

分类:

2009-03-07 11:47:22

    static全局变量和普通的全局变量都是存储在静态存储区中,二者的不同在于satic全局变量的作用域是他所在的源文件,而普通的全局变量所、的作用域是整个源程序。
    普通的局部变量在他所在的函数被调用时都重新分配存储空间,而static局部变量只被初始化,直到源程序运行结束后才释放为他分配的空间,在程序运行过程中他将始终保存上一次的修改结果。

  例如下面的程序分别写在两个文件中。
  file1.c

  #include                                                           
   extern  int A,B;  //A是在文件file2.c中定义的普通全局变量
                       //B是在file2.c中定义的static全局变量
   void f()
   {
   printf("A=%d,B=%d",A,B);
   }

file2.c

   #include                                                           
   int A =20;
   static int B=30;
   extern void f();
  int main()
   {
    printf("A=%d,B=%d\n",A,B);
   f();
   return 0;
  }
    当执行gcc -Wall -o test file2.c file1.c时将出现提示:   

   /tmp/cc6A5ABT.o: In function `f':
file2.c:(.text+0x7): undefined reference to `B'
collect2: ld 返回 1
这说明B没有定义。
当把file1.c修改为

#include                                                           
   extern  int A;  //A是在文件file2.c中定义的普通全局变量
                      
   void f()
   {
   printf("A=%d,B=%d",A,A);
   }

执行结果:A=20,B=30
        A=20,B=20











阅读(5355) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~