Pourquoi suis-je autorisé à utiliser une variable qualifiée const comme taille de tableau en C?

Lorsque je lance le code suivant, cela fonctionne très bien pour C:

#include int main(void) { const int x=5; char arr[x]; printf("%d",sizeof(arr)); } 

Mais non seulement j’avais lu auparavant que les variables qualifiées de const n’étaient pas de real constantes (c’est pourquoi elles ne pouvaient pas être utilisées en case de switch-case ), mais le lien suivant d’ IBM corrobore cela ( IBMLINK ) et indique:

  const int k = 10; int ary[k]; /* allowed in C++, not legal in C */ 

Pourquoi suis-je alors autorisé à utiliser une variable qualifiée const en C comme taille de tableau sans erreur?

c99 supporte les tableaux de longueur variable mais c90 ne supporte pas les tableaux de longueur variable, vous pouvez le voir plus clairement si vous utilisez gcc et essayez de comstackr avec ces arguments:

 gcc -std=c89 -pedantic 

cela vous donnera l’avertissement suivant:

 warning: ISO C90 forbids variable length array 'y' [-Wvla] 

mais si vous comstackz avec c99 c’est très bien:

 gcc -std=c99 -pedantic 

Comme l’a souligné John Bode, les tableaux de longueur variable standard ( VLA ) de 2011 sont désormais facultatifs. Voici un article du Dr Dobbs sur VLA et un lien vers la documentation gcc comme l’a souligné Wayne Conrad.