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

Jug*_*gni 5 c arrays const constants lifetime

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

#include<stdio.h>

int main(void)
{

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

}
Run Code Online (Sandbox Code Playgroud)

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

 const int k = 10;
 int ary[k];     /* allowed in C++, not legal in C */
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*our 10

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

gcc -std=c89 -pedantic
Run Code Online (Sandbox Code Playgroud)

这会给你以下警告:

warning: ISO C90 forbids variable length array ‘y’ [-Wvla]
Run Code Online (Sandbox Code Playgroud)

但如果你使用c99它编译是完全正常的:

gcc -std=c99 -pedantic 
Run Code Online (Sandbox Code Playgroud)

正如John Bode所指出的那样,2011 C标准变长数组(VLA)现在是可选的.这是关于VLA 的Dr Dobbs文章,以及Wayne Conrad指出的gcc文档链接.