инструкция goto для перехода вперед массива переменной длины
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
1 ответов
запрещено стандартом:
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
выделяется, теперь вы находитесь "внутри" области. Перед распределением вы находитесь " снаружи" масштаб. Таким образом, вы не можете "перейти из-за пределов области" в "внутри области".