Por que “typdef struct {struct S * s; } S; ”contendo um ponteiro para o mesmo tipo de compilação?

Eu estou tentandotypedef a struct que contém um ponteiro para outro do mesmo tip

That o que eu pensei que seria a melhor versão:

typedef struct Element
{
    char value;
    struct Element *next;
} Element;

Por que essa variante também está compilando + executando?:

typedef struct
{
    char value;
    struct Element *next;
} Element;

Para descrever o primeiro, eu diria: "Nomestruct Element Element agora" e o segundo como: "Tome este anônimostruct e chame-oElement"

Mas por que ainda posso declarar umstruct Element (dentro da estrutura) no segundo caso?

(Trabalhando emGCC eMSVC)

questionAnswers(3)

yourAnswerToTheQuestion