为什么这段代码不能编译
#include <stdio.h>
int x=5;
int a[x];
int main()
{
a[0]=5;
printf("%d\n",a[0]);
return 0;
}
使用 gcc filename.c -Wall -ansi -pedantic 编译时会产生错误
错误:在文件范围内可变地修改了“a”
然而,这段代码编译虽然给出警告但给出正确的输出:
#include <stdio.h>
int main()
{
int x=5;
int a[x];
a[0]=5;
printf("%d\n",a[0]);
return 0;
}
警告:ISO C90 禁止可变长度数组 'a' [-Wvla]
但是,如果我尝试使用 g++ filename.c -Wall -ansi -pedantic 编译它,它不会产生警告并给出正确的输出
#include <stdio.h>
const int x=5;
int a[x];
int main()
{
a[0]=5;
printf("%d\n",a[0]);
return 0;
}
我正在使用 gcc 版本 4.7.0
请详细解释发生了什么?