7
void fun ()
{
    int i;
    int a[]=
    {
    [0]=3,
    [1]=5
    };
}

上記の a[] 配列代入の方法は c 言語でサポートされていますか。はいの場合、どのcバージョン。
上記のコードをgccでコンパイルしましたが、正常に動作します。

しかし、私はこの種の割り当てを前に見たことがありません。

4

3 に答える 3

7

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
    };
}
于 2013-07-23T10:06:58.380 に答える
7

これは C89 の GCC 拡張機能であり、C99 の標準の一部であり、「指定された初期化子」と呼ばれます。

http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.htmlを参照してください。

于 2013-07-23T10:05:34.880 に答える