没有malloc的c中的动态内存分配

时间:2013-10-06 12:27:21

标签: c arrays dynamic-memory-allocation

这是我的一位朋友写过的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;
}

2 个答案:

答案 0 :(得分:2)

-pedantic添加到您的编译选项(例如-Wall -std=c89 -pedantic),gcc会告诉您:

warning: ISO C90 forbids variable length array ‘arr’

这意味着您的程序确实不符合c89 / c90。

使用-pedantic-pedantic-errors gcc进行更改将停止翻译。

答案 1 :(得分: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]