このコードがコンパイルされない理由
#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 を使用しています
何が起こっているのか詳しく説明してください。