原创 全局变量加 static 和不加有什么区别?

2008-8-27 18:32 4391 5 5 分类: 软件与OS


 



全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。


 


Q:在ggg.h中定义  



  static   int   kkk;   
   
   
  #include   "ggg.h"  
  int   main(int   argc,   char*   argv[])  
  {  
          kkk   =   5; //怎么能访问啊,不是不能跨文件访问的吗  
          printf("%d",kkk);  
          return   0;  
  }


 


A1:加入#include   "ggg.h"  
  和在本文件声明static   int   kkk;是一样的


A2:头文件在编译的时候会被全部加入.c的文件,就不是跨文件访问了,  
  跨指的是.c的文件


A3:最常用的是在*.C里面声明全局static变量,只在本*.C里面可用。  
   
  如象楼主那样写在头文件里,每个包含此头文件的cpp都有一个各自不同的static   int   kkk,且不可互相访问


A4:include的用法,就是要将其在本文件中展开。  
   
  所以当然能在本文件中用了!


A5:放在所有函数跟类外部的static变量,是只有本模块才能使用的  
  所谓模块,可以看作.c或者.cpp在进行了所有的预处理之后得到的东西


A6:全局     指在某个.cpp中所有地方可见   并非工程的所有.cpp文件中可见  
  static   影响一个变量的连接方式     和     存储位置  
  (连接方式):static   与   extern     对应     被static   的变量   不能   通过   extern   方式     访问到    
  (存储位置):被static   变量存在静态常量区    
   
  (它与const不同,   被const   的数据   ,编译器不分配存储空间,只是编译期间   ,记录在   符号表中,const是为了   继承   define   XX   number   的优点   摈弃   define   XX   number的弱点才提出的  
  define   不进行类型监测)  
   
  include   包含   那个变量就相当于那个文件中又定义了一个同名的变量


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /3 下一条