2

我需要为符号分配一个可变大小,

typedef int SYMBOL

我按照以下方式做了

SYMBOL test[nc], 这里 nc 是一个整数。但这给了我以下警告:

ISO C90 forbids variable-size array

我怎么能在没有收到警告的情况下做到这一点?

谢谢, 特纳

4

4 回答 4

4

在引入可变大小的数组之前,alloca库函数是为此而设计的。

这一切都与增加堆栈指针有关。对于典型的常量大小数组的声明,堆栈指针会增加一个在编译时已知的常量。当声明一个可变大小的数组时,堆栈指针会增加一个在运行时已知的值。

于 2011-02-15T18:24:23.910 回答
3

您必须使用以下方式分配它malloc

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

// ...

free(test);

C90 中不允许使用可变长度数组,我认为它们是在 C99 中引入的。

于 2011-02-15T18:24:17.427 回答
3

使用malloc. 在这里,您可以分配具有输入大小的数组:

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

p[0]此外,您可以使用 ( , p[1],...) 表示法访问数组。

于 2011-02-15T18:33:23.950 回答
1

为什么不使用 C99?您可以通过添加 -std=c99 选项来使用 gcc 执行此操作。如果编译器足够聪明,可以识别出某个功能是 C90 还是其他东西,我敢打赌它足够聪明,可以处理 C99 功能。

于 2011-02-15T19:51:53.303 回答