2

这是我的一位朋友编写的 C 程序。据我所知,数组必须在 C99 引入 VLA 之前的编译时初始化,或者malloc在运行时使用。

但是这里程序从用户那里接受 a 的值const并相应地初始化数组。即使使用 ,它也可以正常工作gcc -std=c89,但对我来说看起来很不对劲。这一切都依赖于编译器吗?

#include <stdio.h>

int
main()
{
 int const n;
 scanf("%d", &n);
 printf("n is %d\n", n);
 int arr[n];
 int i;
 for(i = 0; i < n; i++)
   arr[i] = i;
 for(i = 0; i < n; i++)
   printf("%d, ", arr[i]);
 return 0;
}
4

2 回答 2

2
于 2013-10-06T12:32:38.323 回答
1

这称为可变长度数组并在 C99 中允许。在c89带标志的模式下编译-pedantic,编译器会给你警告

[Warning] writing into constant object (argument 2) [-Wformat]  
[Warning] ISO C90 forbids variable length array 'arr' [-Wvla]
[Warning] ISO C90 forbids mixed declarations and code [-pedantic]
于 2013-10-06T12:28:33.177 回答