随笔 - 1, 文章 - 9, 评论 - 4, 引用 - 0
数据加载中……

static、作用域、连接属性

关于之前比较迷惑的static和作用域问题的一点总结。

static int n; // file scoped ariable  
float f; // global variable  
 
int main()  
{  
        
double d; // local variable  
}  

变量f的范围可以说是global也可以说超出了所在文件。每个变量都有一个连接属性,用于在连接时判断其他文件是否有权利指向这个变量。这里的f声明,c++默认给它了一个连接属性:extern,也就是说在其他文件中,可以使用这个变量,当然前提是你包含了此文件,或者在一个工程里面(因为它是连接属性)。对于变量n,前面的static导致这个变量的连接属性为:此文件,就是说外部文件无法使用它。

static之所以引起混淆,是因为一开始学的时候,它的应用在于把上面这个d,这个局部变量变的固定。讲到static必然有个例子,是在函数中有个局部变量,然后声明为static,接着自增,之后神奇的发现变量居然没有自动释放。这其实还是个局部变量,出了函数是没法使用的。

对于extern,常用的做法还有:
extern int array[];
这样在头文件里面声明一个数组类型,然后在cpp中定义它。

posted on 2008-12-19 17:03 EiN 阅读(865) 评论(0)  编辑 收藏 引用 所属分类: C/C++ and ASM


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