Учитывая, что ваш код написан (в частности, у вас есть инструкция), это должен быть код внутри функции.
Хотя я не уверен, что это строго требуется в спецификации, внутри функции в стек помещаются все автоматически (то есть функциональный уровень, а не статические) массивы. Поэтому, независимо от того, есть ли у вас обычный или VL-массив, память выделяется во время выполнения.
Память для неавтоматических массивов не обрабатывается во время выполнения, поэтому поддержка VLA не поддерживается. Если вы пытаетесь скомпилировать следующий код:
extern int size;
char buff1[size];
void doit(int x)
{
static int buff2[x];
int buff3[x];
}
На компилятором я проверил это на (НКУ 4.2.1), я получил следующие ошибки:
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
Это также предусмотрено в качестве расширения по г ++, хотя VLA не является частью C++ (но будет частью C++ 0x). –
Расширение C++ не включает поддержку ссылок на тип массива переменной длины; ни один из параметров функции не может быть ссылкой на тип массива переменной длины. (IBM C++) –
Нет, он не будет частью C++ 0x. – 2009-12-08 11:41:05