6

当我运行以下代码时,它适用于 C:

#include<stdio.h>

int main(void)
{

const int x=5;
char arr[x];
printf("%d",sizeof(arr));

}

但我不仅之前读过const合格的变量不是real常量(这就是为什么它们不能在case条件下使用),而且来自IBMswitch-case的以下链接证实了这一点(IBMLINK)并说:

 const int k = 10;
 int ary[k];     /* allowed in C++, not legal in C */

那么为什么允许我const在 C 中使用限定变量作为数组大小而没有任何错误?

4

1 回答 1

11

c99支持变长数组但c90不支持变长数组,如果你正在使用gcc并尝试使用这些参数进行编译,你可以更清楚地看到这一点:

gcc -std=c89 -pedantic

这会给你以下警告:

warning: ISO C90 forbids variable length array ‘y’ [-Wvla]

但是如果你用c99它编译就很好了:

gcc -std=c99 -pedantic 

正如 John Bode 所指出的,从 2011 年开始,C 标准可变长度数组(VLA)现在是可选的。这是Dobbs 博士关于 VLA 的文章,也是Wayne Conrad 指出的gcc文档链接。

于 2013-05-16T13:10:41.077 回答