Инициализация массива нулей в структуре вызывает ошибку - PullRequest
0 голосов
/ 25 марта 2012

Я пытаюсь инициализировать массив внутри структуры со всеми нулями.

typedef struct month {
    char name[19];
    int yearCounts[10] = { 0 };
    struct month *next;
} MONTH;

Компилятор, похоже, не хочет, чтобы я установил yearCounts для значений внутри структуры. Я получаю старую ошибку: «ожидается â: â, â, â, â; â, â} â или â_attribute_â перед токеном â = â»

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

Мне не хватает чего-то глупого или мне просто не разрешено инициализировать массив со значениями внутри определения структуры?

Я компилирую, используя gcc в стандарте C89, если это имеет значение.

Ответы [ 3 ]

3 голосов
/ 25 марта 2012

Мне не хватает чего-то глупого или мне просто не разрешено инициализировать массив со значениями внутри определения структуры?

Инициализаторы не имеют смысла в объявлениях структуры.

2 голосов
/ 25 марта 2012

Нельзя указывать инициализацию как часть определения типа.Вы должны ждать инициализации, пока не определите объект этого типа.С компилятором C89 / 90 нет реального способа инициализации yearCounts без предварительной инициализации name.В C99 или новее вы можете использовать назначенный инициализатор только для инициализации yearCounts:

MONTH m = { .yearCounts = {0} };
0 голосов
/ 25 марта 2012

Поскольку typedef выполняет только определение MONTH (а не фактическое объявление экземпляра переменных типа MONTH), инициализировать нечего.

typedef struct month {
    char name[19];
    int yearCounts[10];
    struct month *next;
} MONTH;

/* declare month as MONTH and initialise it to all zeros. */
MONTH month = {0};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...