void fun ()
{
int i;
int a[]=
{
[0]=3,
[1]=5
};
}
上記の a[] 配列代入の方法は c 言語でサポートされていますか。はいの場合、どのcバージョン。
上記のコードをgccでコンパイルしましたが、正常に動作します。
しかし、私はこの種の割り当てを前に見たことがありません。
void fun ()
{
int i;
int a[]=
{
[0]=3,
[1]=5
};
}
上記の a[] 配列代入の方法は c 言語でサポートされていますか。はいの場合、どのcバージョン。
上記のコードをgccでコンパイルしましたが、正常に動作します。
しかし、私はこの種の割り当てを前に見たことがありません。
gcc -std=c99
以上を使用してコンパイルする必要があります。そうしないと、次のようになります。
warning: x forbids specifying subobject to initialize
GNU C では、これを C89 の拡張機能として許可しており、-pedantic
フラグがオンの場合にこの警告をスキップできます。__extension__
void fun ()
{
int i;
__extension__ int a[]=
{
[0]=3,
[1]=5
};
}
これは C89 の GCC 拡張機能であり、C99 の標準の一部であり、「指定された初期化子」と呼ばれます。
http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.htmlを参照してください。