我正在阅读K.N.King的C Programming - A Modern Approach学习C编程语言,并注意到goto
语句不得跳过可变长度数组声明。使用goto跳过变量声明?
但现在的问题是:为什么goto
跳转允许跳过固定长度的数组声明和普通声明?更准确地说,根据C99标准,这些例子的行为是什么?当我测试这些案例时,似乎这些声明实际上并未被跳过,但这是否正确?这些变量的声明可能已经跳过安全使用?
goto later;
int a = 4;
later:
printf("%d", a);
2.
goto later;
int a;
later:
a = 4;
printf("%d", a);
goto later;
int a[4];
a[0] = 1;
later:
a[1] = 2;
for(int i = 0; i < sizeof(a)/sizeof(a[0]); i++)
printf("%d\n", a[i]);
@ Mints97嗯,所以如果语句有自己的块,即使没有复合语句?我认为这就是答案:)太糟糕我不能接受评论 – MinecraftShamrock
你是什么意思?如果陈述与此有什么关系呢?块和复合语句差不多,IIRC – Mints97
@ Mints97我的意思是条件声明的变量不会移动到整个函数的开始处,而是仅移动到条件“块”的开头,它们存在于右侧?所以没有复合语句的if语句也会代表这样的块。我的理解是否正确? – MinecraftShamrock