Pergunta sobre C struct - mesmo tipo, sem compatibilidade? [duplicado]

Nov 09 2020

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

2 JohnBode Nov 09 2020 at 21:07
6.7.2.3 Tags
...
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.
Rascunho Online C 2011

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;