我需要为符号分配一个可变大小,
typedef int SYMBOL
我按照以下方式做了
SYMBOL test[nc]
, 这里 nc
是一个整数。但这给了我以下警告:
ISO C90 forbids variable-size array
我怎么能在没有收到警告的情况下做到这一点?
谢谢, 特纳
在引入可变大小的数组之前,alloca
库函数是为此而设计的。
这一切都与增加堆栈指针有关。对于典型的常量大小数组的声明,堆栈指针会增加一个在编译时已知的常量。当声明一个可变大小的数组时,堆栈指针会增加一个在运行时已知的值。
您必须使用以下方式分配它malloc
:
SYMBOL* test = malloc(sizeof(SYMBOL) * nc);
// ...
free(test);
C90 中不允许使用可变长度数组,我认为它们是在 C99 中引入的。
使用malloc
. 在这里,您可以分配具有输入大小的数组:
int *p;
int n;
scanf(" %d", &n);
p = malloc( n * sizeof(int) );
p[0]
此外,您可以使用 ( , p[1]
,...) 表示法访问数组。
为什么不使用 C99?您可以通过添加 -std=c99 选项来使用 gcc 执行此操作。如果编译器足够聪明,可以识别出某个功能是 C90 还是其他东西,我敢打赌它足够聪明,可以处理 C99 功能。