为什么我被允许在C中使用const限定变量作为数组大小?

时间:2013-05-16 13:04:54

标签: c arrays const constants lifetime

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

#include<stdio.h>

int main(void)
{

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

}

但是,我不仅在const限定变量不是real常数之前阅读(这就是为什么它们不能在case switch-case条件下使用的原因,但 IBM 的以下链接证实了这一点(IBMLINK)并说:

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

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

1 个答案:

答案 0 :(得分:10)

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)现在是可选的。以下是关于VLA的Dr Dobbs文章,以及Wayne Conrad指出的gcc docs链接。