C: стек памяти, goto и «переход в область идентификатора с изменяемым типом»,

Я обнаружил, что это отказывается компилировать:

int test_alloc_stack(int size){
    if(0) goto error; // same issue whatever conditional is used
    int apply[size];
    give_values(apply,size);
    return 1;
    error:
        return 0;
}

Ошибка, которую я получаю:перейти в область действия идентификатора с изменяемым типом, Исключая строку с "идти к" и переход к ошибке решает проблемы.

Если я использую динамическое размещение для применения, то проблема также исчезнет. Это хорошо компилируется:

 int test_alloc_heap(int size){
    if(0) goto error;
    int * apply = calloc(sizeof(int),size);
    give_values(apply,size);
    free(apply);
    return 1;
    error : return 0;
}

Что здесь происходит ?

Ответы на вопрос(3)

Ваш ответ на вопрос