int main() {
int sz = 10;
goto end;
char bytes[sz];
end:
return 0;
}
我在编译时遇到以下错误。我使用gcc和C99标准。
test.c: In function ‘main’:
test.c:3:2: error: jump into scope of identifier with variably modified type
test.c:5:1: note: label ‘end’ defined here
test.c:4:7: note: ‘bytes’ declared here
答案 0 :(得分:14)
标准禁止:
C99 standard, paragraph 6.8.6.1 Constraints [...] A goto statement shall not jump from outside the scope of an identifier having a variably modified type to inside the scope of that identifier.
您的goto
会跳过在运行时分配bytes
数组的行。这是不允许的。
您可以通过花括号括起来限制bytes
的范围,将分配放在goto
和标签之前,或者根本不使用goto
。
更明确地说,一旦分配了bytes
,你现在就在范围内。在分配之前,您在范围之外。所以你不能“从范围外跳”到“范围内”。