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

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

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

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

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

14
задан Matt Joiner 30 July 2010 в 18:41
поделиться

1 ответ

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

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

26
ответ дан 1 December 2019 в 10:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: