Что происходит с полями, не названными назначенным инициализатором?

В C99 (а не в С++) можно инициализировать структуры с помощью этого синтаксиса:

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

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

Что происходит с неопределенными полями?

Ответы

Ответ 1

Они обнуляются. Из стандарта C99 & sect; 6.7.8 (Инициализация)/21,

Если в списке, заключенном в скобки, меньше инициализаторов, чем в элементе или элементах совокупности или меньше символов в строковом литерале, используемом для инициализации массива известного размера, чем в массиве, остальная часть совокупности должна быть инициализирована неявно так же, как объекты, имеющие статическую продолжительность хранения.