Что происходит с полями, не названными назначенным инициализатором? - PullRequest
14 голосов
/ 30 июля 2010

В C99 (а не в C ++) можно инициализировать структуры, используя этот синтаксис:

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

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

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

1 Ответ

26 голосов
/ 30 июля 2010

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

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

...