这是我的一位 friend 编写的 C 程序。
据我所知,在 C99 引入 VLA 之前,数组必须在编译时初始化,或者在运行时使用 malloc
。
但这里程序接受来自用户的 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;
}
最佳答案
将 -pedantic
添加到您的编译选项(例如 -Wall -std=c89 -pedantic
),gcc
会告诉您:
警告:ISO C90 禁止可变长度数组“arr”
这意味着你的程序确实不符合c89/c90。
将 -pedantic
更改为 -pedantic-errors
且 gcc
将停止翻译。
关于c - C 中的动态内存分配,无需 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19208834/