Tableaux de taille variable en C

Je suppose que ma question est de savoir si ce qui suit est valide C

int main(void) { int r = 3; int k[r]; return 0; } 

Si tel est le cas, quelqu’un voudrait-il expliquer pourquoi cela ne fonctionne pas dans le compilateur C de Microsoft, mais dans GCC, et à quel moment cela a été ajouté au standard C.

Je vous remercie

C’est une extension GCC que le MSVC actuel ne prend pas en charge. Vous pouvez assez facilement le remplacer dans MSVC par un _alloca (une allocation de stack ne nécessitant aucune désallocation manuelle de la part du programmeur):

 #include  ... int *k = (int *)_alloca(sizeof(*k)*r); 

C’est en C99. MSVC ne prend en charge que C89.

La norme C99 a ajouté des tableaux de longueur variable, mais d’autres fournisseurs tels que GCC les avaient ajoutés beaucoup plus tôt.

Je suis désolé, ce n’est pas une réponse, mais je voudrais signaler un problème potentiel lié à l’utilisation de tableaux de longueur variable. La plupart du code que j’ai rencontré ressemble à ceci.

 void foo(int n) { int bar[n]; . . } 

Il n’y a pas de vérification d’erreur explicite ici. Un grand n peut facilement causer des problèmes.

C’est une extension GCC que le MSVC actuel ne prend pas en charge. Vous pouvez assez facilement le remplacer dans MSVC par un _alloca (une allocation de stack ne nécessitant aucune désallocation manuelle de la part du programmeur).

oui mais c’est limité à 1mb