Почему "typdef struct { struct S *s; } S;", содержащий указатель на тот же тип, компилируется?

Я пытаюсь typedef a struct, который содержит указатель на другой такой же тип.

Это то, что я считал лучшим вариантом:

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

Почему этот вариант тоже компилируется + выполняется?:

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

Для описания первого я бы сказал: "Name struct Element Element now", а второй как: "Возьмите этот анонимный struct и назовите его Element"

Но почему я все еще могу объявить struct Element (внутри struct) во втором случае?

(Работает в GCC и MSVC)

22
задан Ciro Santilli 新疆改造中心法轮功六四事件 3 May 2016 в 09:16
поделиться