O que é 'declaração direta' e a diferença entre 'typedef struct X' e 'struct X'?

Eu sou um iniciante em programação C e sei a diferença entre declaração de tipo de struct e typedef struct declaration. Me deparei para saber uma resposta dizendo que se definirmos uma estrutura como:

typedef struct
{ 
some members;
}struct_name;

Então será como fornecer um alias para uma estrutura anônima (já que não está tendo um nome de tag). Portanto, não pode ser usado para declaração antecipada. Não sei o que significa "declaração antecipada".

Além disso, queria saber isso para o seguinte código:

typedef struct NAME
{ 
some members;
}struct_alias;

Existe alguma diferença entreNAME estruct_alias? Ou ambos são iguais como struct_alias é um alias de struct NAME?

Além disso, podemos declarar uma variável do tipostruct NAME como estes:

struct_alias variable1;

e / ou como:

struct NAME variable2;

ou como:

NAME variable3; 

questionAnswers(5)

yourAnswerToTheQuestion