Как выделить массив переменного размера в C90? - PullRequest
2 голосов
/ 15 февраля 2011

Мне нужно выделить размер переменной для СИМВОЛОВ,

typedef int SYMBOL

Я сделал следующим образом

SYMBOL test[nc], здесь nc является целым,Но это дает мне следующее предупреждение:

ISO C90 forbids variable-size array

Как я могу сделать это без предупреждения?

Спасибо, Тетна

Ответы [ 4 ]

4 голосов
/ 15 февраля 2011

Библиотека alloca была предназначена для этого до введения массивов переменного размера.

Все это связано с увеличением указателя стека.Для объявления типичного массива постоянного размера указатель стека увеличивается на постоянную, известную во время компиляции.Когда объявляется массив переменного размера, указатель стека увеличивается на значение, известное во время выполнения.

3 голосов
/ 15 февраля 2011

Используйте malloc. Здесь вы можете выделить массив с размером входных данных:

int *p;
int n;
scanf(" %d", &n);
p = malloc( n * sizeof(int) );

Кроме того, вы можете получить доступ к массиву, используя обозначения (p[0], p[1], ...).

3 голосов
/ 15 февраля 2011

Вы должны были бы выделить его, используя malloc:

SYMBOL* test = malloc(sizeof(SYMBOL) * nc);

// ...

free(test);

Массивы переменной длины недопустимы в C90, я думаю, они были введены в C99.

1 голос
/ 15 февраля 2011

Почему бы не использовать C99?Вы можете сделать это с помощью gcc, добавив опцию -std = c99.Если компилятор достаточно умен, чтобы признать, что это функция C90, а не что-то другое, я уверен, что он достаточно умен, чтобы обрабатывать функции C99.

...