inicialización de estructuras o uniones anónimas en C1X

engo la siguiente pregunta: ¿Cómo se inicializan adecuadamente las estructuras anónimas (o uniones) de acuerdo con la @ actua C1X draft? ¿Es esto legal:

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

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

In GCC,g.j == 0 yg.b == 3, mientras que en tccg.j == 3 yg.b == 0. El borrador actual dice:

"[...] los miembros sin nombre de objetos de estructura y tipo de unión no participan en la inicialización. Los miembros sin nombre de objetos de estructura tienen un valor indeterminado incluso después de la inicialización".

¿Puede esto ser realmente cierto? No es

struct foo h = { 0 };

supuestamente para establecertodo miembros a 0?

¡Muchas gracias

ACTUALIZA:

Dado que los miembros anónimos parecen ser útiles solo al mezclar estructuras / uniones, cómo inicializar esto correctamente:

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

? Esto genera errores en gcc <4.6 e icc 11, pero funciona en gcc 4.6, icc 12, clang y tcc:

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

Esto da errores en clang y tcc, pero funciona en gcc e icc:

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

¿Es el segundo una violación de la norma?

Respuestas a la pregunta(3)

Su respuesta a la pregunta