Em que escopo é colocado um identificador de membro struct?

A especificação C diz

Existem quatro tipos de escopos: função, arquivo, bloco e protótipo de funçã

Agora se eu fizer o seguinte fora de qualquer função

struct A {
  int x;
};

Meu entendimento é que o identificadorx é visível no escopo do arquivo. E que usamos uma sintaxe de namespace para acessar o membro, como a especificação diz

cada estrutura ou união possui um espaço de nome separado para seus membros (sem ambiguidade pelo tipo da expressão usada para acessar o membro por meio do operador. ou ->)

Vamos deixar isso mais claro adicionando uma função

struct A {
  int x;
};

void f(void) {
  int i;
}

Em seguida, os identificadores, escopos e espaços para nome que participam na representação deste programa são (N / A é "não aplicável"):

file scope
==========================================
Ordinary  |  Members A  |  Tags  |  Labels
------------------------------------------
 f        | x           | A      | N/A
          |             |        |


function scope of f
=========================================
Ordinary  |  Members ? |  Tags  |  Labels
-----------------------------------------
 N/A      | N/A        | N/A    |
          |            |        |


block scope #1
=========================================
Ordinary  |  Members ? |  Tags  |  Labels
-----------------------------------------
 i        |            |        | N/A
          |            |        |

E a hierarquia do escopo é "escopo do bloco nº 1" -> "escopo da função de f" -> "escopo do arquivo"

Certa vez conversei com um escritor de compilador C e ele disse quex não está em nenhum escopo. Alguém pode explicar como isso funcionaria? Como podemos nos referir ax de alguma forma? Cotação adicional (enfatize a minha):

Um identificador pode denotar um objeto; uma função; uma tag ouum membro de uma estrutura, união ou enumeração; um nome typedef; um nome de etiqueta; um nome de macro; ou um parâmetro de macro.

O mesmo identificador pode indicar diferentes entidades em diferentes pontos do program

Para cada entidade diferente que um identificador designa, o identificador é visível (ou seja, pode ser usado) apenas dentro de uma região do texto do programa chamada escop

Se dissermos que um membro de uma estrutura não tem escopo, ele não é visível e, portanto, não pode ser usado. Mas obviamente, nóspod use membros de estrutura. Estou faltando alguma coisa?

questionAnswers(4)

yourAnswerToTheQuestion