爲什麼這個代碼不編譯不尋常的行爲
#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