Pergunta sobre C struct - mesmo tipo, sem compatibilidade? [duplicado]
Enquanto estudava C e os princípios da linguagem de programação, tive um problema com declarações de estrutura.
struct{
int i;
double j;
} x, y;
struct{
int i;
double j;
} z;
Atribuir x = y não causa erro, enquanto x = z causa erro. Não consigo entender por que isso está acontecendo. Eles têm a mesma estrutura, então pensei que seriam compatíveis.
Além disso, o problema diz que haveria duas maneiras diferentes de corrigir o código. A primeira coisa seria deixar z próximo a x, y; Não consigo outra maneira de encontrá-lo. Quaisquer sugestões serão bem-vindas. Obrigada
Respostas
6.7.2.3 TagsRascunho Online C 2011
...
5 Duas declarações de estrutura, união ou tipos enumerados que estão em escopos diferentes ou usam tags diferentes declaram tipos distintos. Cada declaração de uma estrutura, união ou tipo enumerado que não inclui uma tag declara um tipo distinto.
Enfase adicionada. zé considerado como tendo um tipo distinto de xe y, embora tenha a mesma representação.
A maneira adequada de corrigir isso é declarar o structcom um nome de tag:
struct foo {
int i;
double j;
} x, y;
e, em seguida, declare zusando a mesma tag:
struct foo z;