全局变量(外部变量)的说明之前再冠以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 包含 那个变量就相当于那个文件中又定义了一个同名的变量
文章评论(0条评论)
登录后参与讨论