@jmuc: Если члены анонимной структуры или объединения «считаются членами содержащей структуры или объединения», то мне кажется, что, хотя анонимная структура или объединение является «неназванным», его члены, как члены содержащие структуру или объединение, именуются ...

я следующий вопрос: как правильно инициализируются анонимные структуры (или союзы) в соответствии с текущимЧерновик C1X? Это законно:

struct foo {
    int a;
    struct {
        int i;
        int j;
    };
    int b;
};

struct foo f = { 1, 2, 3, 4 };
struct foo g = { 1, { 2 }, 3 };

В GCC,g.j == 0 а такжеg.b == 3в то время как в тккg.j == 3 а такжеg.b == 0, Текущий проект говорит:

«[...] неназванные члены объектов структуры и типа объединения не участвуют в инициализации. Безымянные члены объектов структуры имеют неопределенное значение даже после инициализации.».

Может ли это быть действительно правдой? не

struct foo h = { 0 };

должен установитьвсе членов до 0?

Большое спасибо!

ОБНОВИТЬ:

Поскольку анонимные члены кажутся полезными только при смешивании структур / объединений, как правильно инициализировать это:

struct bar {
    int tag;
    union {
        double d;
        int i;
    };
};

? Это дает ошибки в gcc <4.6 и icc 11, но работает в gcc 4.6, icc 12, clang и tcc:

struct bar a = { .tag = 1, .i = 42 };

Это дает ошибки в clang и tcc, но работает в gcc и icc:

struct bar b = { .tag = 1, { .i = 42 } };

Является ли второй нарушением стандарта?

Ответы на вопрос(3)

Ваш ответ на вопрос