对于全局变量和局部变量,static的修饰有一点让人混淆的地方。
1、对于全局变量(全局函数),定义如下:
int a = 0;
此处没有加上static修饰,但是,变量a是存放在静态存储区的。不过,变量a的可见性是所有translation unit(编译单元)。
如果将其定义改成:
static int a = 0;
变量a的可见性(visibility)便有所有translation unit 变为“仅当前文件”可见,存储区域并没变。
2、对于局部变量:static修饰的就不是visibility了,而是storage area。
而对于局部变量用extern加以修饰,那么该变量依然被认为“在其他某个地方有定义,此处只是声明”,所以,该“局部”变量实际上是一个全局变量的使用。