先来看段代码
int count = 0;
void test1();
void test2();
int main(void){
int count = 0;
for(;count < 3; ++count){
test1();
test2();
}
}
void test1(){
printf("test1 %d\n", count++);
}
void test2(){
static int count = 0;
printf("test2 %d\n", count++);
}
运行的结果是:
test1 1
test2 1
test1 2
test2 2
test1 3
test2 3
结果为什么是这样呢?
这段代码定义了3个名为count的变量,全局变量count, main函数内的自动变量count, test2内的静态变量count。由于main内的count与全局变量同名,全局变量被隐藏,main函数域内只认自动变量count,控制着循环。test1函数内的count是全局变量,跟main没关系。test2函数内的count是自己的静态变量,跟全局变量和main的自动变量都没关系。