为什么这个代码不编译不寻常的行为
#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禁止可变长度数组 '一个'[-Wvla]
然而,如果我尝试编译此使用克++ 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
请详细解释一下发生了什么?
的'const'使所有的差异?问题基本上是“为什么不正确的代码不能编译,而正确的代码呢?”。 –
研究您正在编码的语言标准的确切参考。 http://en.wikipedia.org/wiki/C_programming_language http://en.wikipedia.org/wiki/C99 http://en.wikipedia.org/wiki/C%2B%2B http://en.wikipedia .org/wiki/C%2B%2B11并将'-Wall'传递给GCC编译器 –
@LuchianGrigore那么答案是什么? – Snehasish