-Wmissing-field-initializer при использовании назначенных инициализаторов
Я использую GCC 4.6.2 (Mingw) и компилирую с -Wextra
, Я получаю странные предупреждения, когда использую назначенные инициализаторы. Для следующего кода
typedef struct
{
int x;
int y;
} struct1;
typedef struct
{
int x;
int y;
} struct2;
typedef struct
{
struct1 s1;
struct2 s2[4];
} bug_struct;
bug_struct bug_struct1 =
{
.s1.x = 1,
.s1.y = 2,
.s2[0].x = 1,
.s2[0].y = 2,
.s2[1].x = 1,
.s2[1].y = 2,
.s2[2].x = 1,
.s2[2].y = 2,
.s2[3].x = 1,
.s2[3].y = 2,
};
Я получаю предупреждения
bug.c:24:3: warning: missing initializer [-Wmissing-field-initializers]
bug.c:24:3: warning: (near initialization for 'bug_struct1.s1.y') [-Wmissing-field-initializers]
Так чего именно не хватает? Я инициализировал каждого участника. Является ли это предупреждение слишком грубым для работы с назначенными инициализаторами, я делаю что-то не так или это ошибка компилятора?
1 ответ
Решение
Кажется, что предупреждение, как вы говорите, "слишком тупое".
Этот шаблон доступа, инициализирующий каждую структуру-член в целом, удовлетворяет компилятору:
bug_struct bug_struct1 =
{
.s1 = {.x = 1, .y = 2},
.s2[0] = {.x = 1, .y = 2},
.s2[1] = {.x = 1, .y = 2},
.s2[2] = {.x = 1, .y = 2},
.s2[3] = {.x = 1, .y = 2}
};