【发布时间】:2014-06-11 12:13:13
【问题描述】:
我正在使用 gcc 编译器编译我的 C 代码
我的代码是
main()
{
int i;
scanf("%d",&i);
int a[i];
}
... 它在没有任何警告的情况下执行它。但是,如果我使用:
main()
{
int i;
scanf("%d",&i);
static int a[i];
}
...我收到一条错误消息,指出数组的大小不是恒定的。
如果程序的执行从main 函数开始,它不应该给出这样的错误。
如果在main()开始之前先分配静态数据,编译器如何在编译期间产生这样的错误?
【问题讨论】:
-
从技术上讲,第一个也不应该被允许。我相信它是一个 gcc 扩展的事实。
-
@dlf 仅适用于 C++
-
你正在使用VLA,不允许是静态的或外部的
-
@CoolGuy i 通过 scanf() 取值