inicialização de estruturas ou uniões anônimas no C1X
Eu tenho a seguinte pergunta: Como as estruturas (ou uniões) anônimas são inicializadas corretamente de acordo com a atualRascunho C1X? Isso é 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 };
No GCC,g.j == 0
eg.b == 3
, enquanto em tccg.j == 3
eg.b == 0
. O rascunho atual diz:
"[...] membros não nomeados de objetos de estrutura e tipo de união não participam da inicialização. Membros sem nome de objetos de estrutura têm valor indeterminado, mesmo após a inicialização.".
Isso pode ser verdade? Não é
struct foo h = { 0 };
deveria definirtudo membros para 0?
Muito obrigado!
ATUALIZAR:
Como membros anônimos parecem ser úteis apenas ao misturar estruturas / uniões, como inicializar isso corretamente:
struct bar {
int tag;
union {
double d;
int i;
};
};
? Isso fornece erros no gcc <4.6 e no icc 11, mas funciona no gcc 4.6, icc 12, clang e tcc:
struct bar a = { .tag = 1, .i = 42 };
Isso gera erros no clang e no tcc, mas funciona no gcc e no icc:
struct bar b = { .tag = 1, { .i = 42 } };
O segundo é uma violação do padrão?