为什么变量定义在条件语句内编译会报错?即使一定会运行到。

int main()
{
    int i = 0;
    while (i < 10) {
        int a = 1;
        i++;
    }

    printf("a = %d\n", a);

    return 0;
}

error: ‘a’ undeclared

大致原理是什么?

你可以定义在块里
但是不要在块外继续访问它
因为它的作用域就在块里
出了块它就是未定义状态了

img

a是局部变量 printf("a = %d\n", a); 位置超出了a变量的作用于,两种方案,一,提升作用域范围,将a定义在while循环之前,在循环内重新赋值;二,将输出位置放在while循环里面,但每次循环都打印一次

第一:a的作用域只在while里面,外面是用不了的;
第二:循环不一定是一定会执行的,你的这段代码只是人看到知道他一定会执行,但是编译器不会这样理解,编译器只会认为while(true)才会一定执行,其他的都不一定会执行

变量范围问题。一旦出了它定义的范围,那么其他地方是不认识的。

函数调用栈,退栈清变量