static全局变量和普通的全局变量都是存储在静态存储区中,二者的不同在于satic全局变量的作用域是他所在的源文件,而普通的全局变量所、的作用域是整个源程序。
普通的局部变量在他所在的函数被调用时都重新分配存储空间,而static局部变量只被初始化,直到源程序运行结束后才释放为他分配的空间,在程序运行过程中他将始终保存上一次的修改结果。
例如下面的程序分别写在两个文件中。
file1.c
#include
extern int A,B; //A是在文件file2.c中定义的普通全局变量
//B是在file2.c中定义的static全局变量
void f()
{
printf("A=%d,B=%d",A,B);
}
file2.c
#include
int A =20;
static int B=30;
extern void f();
int main()
{
printf("A=%d,B=%d\n",A,B);
f();
return 0;
}
当执行gcc -Wall -o test file2.c file1.c时将出现提示:
/tmp/cc6A5ABT.o: In function `f':
file2.c:(.text+0x7): undefined reference to `B'
collect2: ld 返回 1
这说明B没有定义。
当把file1.c修改为
#include
extern int A; //A是在文件file2.c中定义的普通全局变量
void f()
{
printf("A=%d,B=%d",A,A);
}
执行结果:A=20,B=30
A=20,B=20
阅读(5420) | 评论(0) | 转发(0) |