Tableau dynamique de l'allocation sur la pile en C

J'ai juste fait une expérience d'hier, et de trouver quelque chose de déroutant:

#include <stdio.h>

int main()
{
    int j;
    scanf("%d",&j);
    const int i = j;
    int arr[i];
    return 0;
}

Le nombre j est lu à partir du clavier, et il est utilisé pour allouer le tableau arr sur la pile.

Le compilateur ne sait même pas la taille du tableau au moment de la compilation (initialise j à 0?), mais il n'y a pas d'erreur de compilation. Comment est-il possible?

En fait, vous devez expliquer pourquoi vous pensez que le compilateur doit donner une erreur
Recherche [c] VLA dans ce site.
je pense que vous avez été d'étudier c89 tout ce temps..
au passage, en passant par la variable supplémentaire i est inutile et le code serait très bien sans.
comme C11 tag a été ajouté, note que C11 introduit VLAs prise en charge. __STDC_NO_VLA__ objet macro est définie à 1 si spécifiques de mise en œuvre ne permet pas de les traiter.

OriginalL'auteur user3769509 | 2014-10-18