int main()
{
int i = 0;
while (i < 10) {
int a = 1;
i++;
}
printf("a = %d\n", a);
return 0;
}
error: ‘a’ undeclared
大致原理是什么?
你可以定义在块里
但是不要在块外继续访问它
因为它的作用域就在块里
出了块它就是未定义状态了
a是局部变量 printf("a = %d\n", a); 位置超出了a变量的作用于,两种方案,一,提升作用域范围,将a定义在while循环之前,在循环内重新赋值;二,将输出位置放在while循环里面,但每次循环都打印一次
第一:a的作用域只在while里面,外面是用不了的;
第二:循环不一定是一定会执行的,你的这段代码只是人看到知道他一定会执行,但是编译器不会这样理解,编译器只会认为while(true)才会一定执行,其他的都不一定会执行
变量范围问题。一旦出了它定义的范围,那么其他地方是不认识的。
函数调用栈,退栈清变量