C90中如何分配可变大小数组?
我需要为 SYMBOL 分配一个变量大小,
typedef int SYMBOL
我按照以下方式进行
SYMBOL test[nc]
,这里 nc
是一个整数。但这给了我以下警告:
ISO C90 禁止可变大小数组
我怎样才能在没有警告的情况下做到这一点?
谢谢, 塞特纳
I need to allocate a varibale size for SYMBOLs,
typedef int SYMBOL
I did in following way
SYMBOL test[nc]
, here nc
is an integer. But this gives me following warning:
ISO C90 forbids variable-size array
How could i do it without getting warning?
Thanks,
Thetna
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在引入可变大小数组之前,
alloca
库函数就是用于此目的的。这一切都与增加堆栈指针有关。对于典型的常量大小数组的声明,堆栈指针会随着编译时已知的常量而递增。当声明可变大小数组时,堆栈指针会以运行时已知的值递增。
The
alloca
library function was intended for that before variable-sized arrays were introduced.It all has to do with incrementing the stack pointer. For the declaration of a typical constant-size array, the stack pointer is incremented with a constant that is known at compile-time. When a variable-size array is declared, the stack pointer is incremented with a value which is known at runtime.
您必须使用 malloc 来分配它:
C90 中不允许使用可变长度数组,我认为它们是在 C99 中引入的。
You would have to allocate it using
malloc
:Variable length arrays are not allowed in C90, I think they were introduced in C99.
使用
malloc
。在这里,您可以分配一个具有输入大小的数组:此外,您可以使用 (
p[0]
,p[1]
,...) 访问该数组符号。Use
malloc
. Here you can allocate an array with the size of the input:Also, you can access the array using (
p[0]
,p[1]
,...) notation.为什么不使用C99呢?您可以通过添加 -std=c99 选项来使用 gcc 来执行此操作。如果编译器足够聪明,能够识别某个功能是 C90 与其他功能,我敢打赌它足够聪明,可以处理 C99 功能。
Why not use C99? You can do this with gcc by adding the -std=c99 option. If the compiler is smart enough to recognize that a feature is C90 vs. something else, I bet it is smart enough to handle C99 features.