问:编译并运行如下代码,会有问题吗?
int main(int argc, char* argv[])
{
if(1)
{
uint32_t b = 1;
}
printf("%d\r\n", b);
return 0;
}
答:编译时将报错“ error: ‘b’ undeclared (first use in this function)”。
问:第5行我明明定义(并声明)了,为什么还报错?
答:变量b的作用域仅限于离它最近的大括号内。即便如下的代码还是会报同样的问题:
int main(int argc, char* argv[])
{
{
uint32_t b = 1;
}
printf("%d\r\n", b);
return 0;
}
结论:变量定义的位置决定它的作用域,{}内定义的变量作用域限定在离该变量定义最近的{}中。