[英]How to allocate variable size array in C90?
我需要为SYMBOLs分配一个varibale大小,
typedef int SYMBOL
我按照以下方式做了
SYMBOL test[nc]
,这里nc
是一个整数。 但这给了我以下警告:
ISO C90 forbids variable-size array
如果没有收到警告我该怎么办?
谢谢,Thetna
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功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.