This is a type, and you cannot have an anonymous instance of the structure. For comparison, this declares a struct_type type and an instance of a struct_instance this type:
struct struct_type { } struct_instance;
If you want to declare another instance separately (from decl type), you should use
struct struct_type another_instance;
Using typedef โ if done correctly, unlike your example โ simply allows you to specify the type of another name that does not require the struct keyword to declare an instance:
typedef struct_type MyStruct; MyStruct yet_another_instance;
or equivalent
typedef struct struct_type { } MyStruct;
omitting the name ( struct_type ) gives you an anonymous type of structure, which can only be referenced by its name typedef'd.
Note 1
Since your source structure contains a next pointer for its own type, this type must have a name at the point declared by the member. Thus, you cannot declare an anonymous structure using a typical pointer. If you give your anonymous structure type a name with typedef , that name does not exist until a member declaration is declared, so it cannot be used.
typedef struct /*S*/ { struct S *next; } T;
Note 2
You can declare an anonymous instance of an anonymous union as a member:
struct S { union { int i; unsigned u; }; }; struct S s; si = -1; printf("%x\n", su);
but this is a very special case. I made a remark about this from the main argument, if it is misleading.