Étant donné que votre code est écrit (en particulier, que vous avez une déclaration), il doit s'agir de code dans une fonction.
Bien que je ne sache pas si cela est strictement requis dans la spécification, dans une fonction, tous les tableaux automatiques (c'est-à-dire, au niveau de la fonction, et non statiques) sont placés sur la pile. Ainsi, que vous disposiez d'un tableau régulier ou VL, la mémoire est allouée au moment de l'exécution.
La mémoire pour les baies non-auto n'est pas gérée lors de l'exécution, donc ne supporte pas VLA. Si vous essayez de compiler le code suivant:
extern int size;
char buff1[size];
void doit(int x)
{
static int buff2[x];
int buff3[x];
}
Sur le compilateur je l'ai testé ceci sur (gcc 4.2.1), je me suis erreurs suivantes:
moo.c:2: error: variably modified ‘buff1’ at file scope
moo.c: In function ‘doit’:
moo.c:6: error: storage size of ‘buff2’ isn’t constant
Il est également prévu comme une extension de g ++ bien VLA ne fait pas partie de C++ (mais une partie de C++ 0x). –
L'extension C++ n'inclut pas la prise en charge des références à un type de tableau de longueur variable; un paramètre de fonction ne peut pas non plus être une référence à un type de tableau de longueur variable (IBM C++) –
Non, il ne fera pas partie de C++ 0x. –