C: stack memory, goto e “pula para o escopo do identificador com o tipo variavelmente modificado”,

Eu achei que isso se recusa a compilar:

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;
}

O erro que recebo é: "saltar para o escopo do identificador com o tipo modificado variavelmente". Eliminar a linha com "goto" e o salto para erro resolve os problemas.

Se eu usar alocação dinâmica para aplicar, o problema também desaparecerá. Isso compila bem:

 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;
}

O que está acontecendo ?

questionAnswers(3)

yourAnswerToTheQuestion