正文

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,register和extern 4种存储类别。 (2) 作用域 指程序中可以引用该变量的区域。 (3) 存储期 指变量在内存的存储期限。 以上3种属性是有联系的,程序设计者只能声明变量的存储类别,通过存储类别可以确定变量的作用域和存储期。 要注意存储类别的用法。auto, static和register 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

阅读(3034) | 评论(0)


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

评论

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