正文

C++ 入门 第四章 4.12.6 用static声明静态外部变量2008-09-13 19:00:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yzrj/38251.html

分享到:

 

有时在程序设计中希望某些外部变量只限于被本文件引用,而不能被其他文件引用。这时可以在定义外部变量时加一个static声明。例如:
file1.cpp                              file2.cpp
static int a=3;                     extern int a;
int main ( )                          int fun (int n)
{                                             {
                                          a=a*n;
                                              
}                                             }
 
这种加上static声明、只能用于本文件的外部变量(全局变量)称为静态外部变量。这就为程序的模块化、通用性提供了方便。如果已知道其他文件不需要引用本文件的全局变量,可以对本文件中的全局变量都加static,成为静态外部变量,以免被其他文件误用。
需要指出,不要误认为用static声明的外部变量才采用静态存储方式(存放在静态存储区中),而不加static的是动态存储(存放在动态存储区)。实际上,两种形式的外部变量都用静态存储方式,只是作用范围不同而已,都是在编译时分配内存的。
 
4.13 变量属性小结
一个变量除了数据类型以外,还有3种属性:
(1) 存储类别 C++允许使用auto,static,registerextern 4种存储类别。
(2) 作用域 指程序中可以引用该变量的区域。
(3) 存储期 指变量在内存的存储期限。
以上3种属性是有联系的,程序设计者只能声明变量的存储类别,通过存储类别可以确定变量的作用域和存储期。
要注意存储类别的用法。auto, staticregister 3种存储类别只能用于变量的定义语句中,如
 
auto char c;                   //字符型自动变量,在函数内定义
static int a;                  //静态局部整型变量或静态外部整型变量
register int d;                //整型寄存器变量,在函数内定义
extern int b;                  //声明一个已定义的外部整型变量
说明: extern只能用来声明已定义的外部变量,而不能用于变量的定义。只要看到extern,就可以判定这是变量声明,而不是定义变量的语句。
下面从不同角度分析它们之间的联系。
 
(1) 从作用域角度分,有局部变量和全局变量。它们采用的存储类别如下:
局部变量
自动变量,即动态局部变量(离开函数,值就消失)
静态局部变量(离开函数,值仍保留)
寄存器变量(离开函数,值就消失)
形式参数(可以定义为自动变量或寄存器变量)
全局变量
静态外部变量(只限本文件引用)
外部变量(即非静态的外部变量,允许其他文件引用)
 
(3) 从变量值存放的位置来区分,可分为
内存中静态存储区
静态局部变量
静态外部变量(函数外部静态变量)
外部变量(可为其他文件引用)
内存中动态存储区:  自动变量和形式参数
CPU 中的寄存器:    寄存器变量
(4) 关于作用域和存储期的概念。从前面叙述可以知道,对一个变量的性质可以从两个方面分析,一是从变量的作用域,一是从变量值存在时间的长短,即存储期。前者是从空间的角度,后者是从时间的角度。二者有联系但不是同一回事。图4.16是作用域的示意图,图4.17是存储期的示意图。
 
 
4.16  
 
    
     
4.17

阅读(3019) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册