GCC позволяет инициализировать массивы с переменной длиной

GCC компилирует следующую функцию

void f(int i)
{
    int a[i];
}

У меня сложилось впечатление, что вы можете инициализировать массивы только с постоянной длиной. Предполагается ли, что это скомпилируется, и будет ли оно делать то, что я ожидаю?


person tomKPZ    schedule 13.10.2013    source источник


Ответы (2)


C99 добавил массивы переменной длины. И gcc добавляет это к c89 как расширение с опцией -std=gnu89 (по умолчанию с gcc).

В последнем стандарте C, C11, поддержка массивов переменной длины помечена как необязательная.

person ouah    schedule 13.10.2013
comment
Помещается ли массив в стек или где-то в куче с помощью malloc? - person tomKPZ; 13.10.2013
comment
@ user1887231 Массивы переменной длины могут быть объявлены только в области блока и с автоматической продолжительностью хранения, поэтому практически да, они обычно хранятся в стеке. - person ouah; 13.10.2013

VLA разрешены в C99. Расширение GCC позволяет компилировать в режиме C89.

person haccks    schedule 13.10.2013