我正在阅读C编程 - KNKing 的现代方法来学习C编程语言,并注意到goto语句不能跳过变长数组声明.
但现在的问题是:为什么goto跳转允许跳过固定长度的数组声明和普通声明?更准确地说,根据C99标准,这些例子的行为是什么?当我测试这些案例时,似乎声明实际上没有被跳过,但这是正确的吗?声明可能已跳过的变量是否可以安全使用?
1.
goto later;
int a = 4;
later:
printf("%d", a);
Run Code Online (Sandbox Code Playgroud)
2.
goto later;
int a;
later:
a = 4;
printf("%d", a);
Run Code Online (Sandbox Code Playgroud)
3.
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]);
Run Code Online (Sandbox Code Playgroud)