Uma união ou estrutura permite a atribuição de uma instância não inicializada?
Esta pergunta é sobre a definição ou não de atribuir uma variável automática não-inicializada a outra do mesmo tipo.
Considerar
typedef struct
{
int s1;
int s2;
} Foo;
typedef union
{
int u1;
Foo u2;
} Bar;
int main()
{
{
int a;
int b = a; // (1)
}
{
Foo a;
Foo b = a; // (2)
}
{
Bar a;
a.u1 = 0;
Bar b = a; // (3)
}
}
Referindo-se aos comentários emmain
:
(1) é indefinido, poisa
é não inicializado. Isso eu sei.
Mas e quanto a (2)? Os membros structs1
es2
são não inicializados.
Além disso, o que dizer de (3)? A memória u2.s2 não foi inicializada, portanto, a leitura é um comportamento indefinido, não?