zhgw01

static 和 extern


static的作用有2个,一个是控制名字的可见性,一个是控制生存期

1.控制名字的可见性
这时候是跟extern相对应的,作用与文件作用域(file scope)内的所有名字(变量名或函数名),其它定义在函数内或类内的变量名或函数名都不具有文件作用域。
一般情况下,当你定义了一个全局范围内变量或函数名的时候,默认的是extern,如在下面的file1.cpp
//file1.cpp
int a=1;  //完整的应该是extern int a=1;但extern是缺省的

void f() //同上一样,这里也是定义
{

}

那么在file2.cpp中你不能再声明a跟f,否则会引起名字冲突,当你想要使用file1.cpp中的a跟f时,可以如下
extern int a; //不运行赋值,这里只是声明,不可以省去extern,否则编译器会认为是重定义

void f(); //同样是声明,而且对函数而言,可以省去extern

   extern int b=1;//这里是定义
这样就可以在file2.cpp中使用a跟f了

反过来,你在文件作用域范围内定义了一个名字,你不希望被其它文件引用,这时候就要在前面加上static,此时这个变量具有internal linkage,它不能被其它文件引用,同时在其它文件中声明同名变量不会认为有冲突(因为static 使得名字只在本文件内可见)。

2.控制生存期

static 变量同global 变量一样,放在static存储区,只有当程序运行结束时,这些变量才会消失

当static变量定义在函数中时,它仅在该函数内可见,当每次函数调用完,这个变量的值都会保留下来

当static变量定义在类当中时,这个变量就同类的对象无关,真个类只有一个该变量的副本,不过它定义了多少个对象,而且对改变量的改变可以只通过类来改变,该变量的变化对所有同类的对象是可见的


posted on 2008-10-20 15:42 apacs 阅读(655) 评论(0)  编辑 收藏 引用 所属分类: c++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


My Links

Blog Stats

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜