Объявление переменной после goto Label

Сегодня я обнаружил одну интересную вещь. Я не знал, что нельзя объявить переменную после метки goto.

Компиляция следующего кода

#include <stdio.h>
int main() {
    int x = 5;
    goto JUMP;
    printf("x is : %d\n",x);
JUMP:
    int a = 0;  <=== giving me all sorts of error..
    printf("%d",a);
}

дает ошибки вроде

temp.c: In function ‘main’:
temp.c:7: error: expected expression before ‘int’
temp.c:8: error: ‘a’ undeclared (first use in this function)
temp.c:8: error: (Each undeclared identifier is reported only once
temp.c:8: error: for each function it appears in.)

Какова логика этого? Я слышал, что нельзя создавать переменные внутри операторов case switch . Поскольку JUMP находится в той же области (в моем случае, в области действия основной функции) оператора goto, я считаю, что область видимости здесь не является проблемой. Но тогда почему я получаю эту ошибку?

66
задан svick 8 November 2013 в 16:49
поделиться