19

C99(C ++ではない)では、次の構文を使用して構造体を初期化することができます。

struct info
{
    char    name[8+1];
    int     sz;
    int     typ;
};

struct info  arr[] =
{
    [0] = { .sz = 20, .name = "abc" },
    [9] = { .sz = -1, .name = "" }
};

指定されていないフィールドはどうなりますか?

4

1 に答える 1

29

それらはゼロにされます。C99標準§6.7.8(初期化)/ 21から、

中括弧で囲まれたリストの初期化子が集合体の要素またはメンバーよりも少ない場合、または既知のサイズの配列を初期化するために使用される文字列リテラルの文字数が配列内の要素よりも少ない場合、集合体の残りの部分は静的な保存期間を持つオブジェクトと同じように暗黙的に初期化されます。

于 2010-07-30T18:45:26.640 に答える