cstructtypedef

Creating a struct referencing itself in C using custom type


I would like to create a struct with pointer to the property of the same type.

Ideally I would like to go for something like this, but this causes compilation error:

typedef struct {

  int data;
  Node *next;

} Node;

Solution I'm going for in this scenerio is:

typedef struct Node_s {

  int data;
  struct Node_s *next;

} Node_t;

Is it a valid approach or could it cause any obvious issues?


Solution

  • It is a valid and idiomatic method of declaring self-referencing structures in C.

    You don't have to introduce different names for the tag and the typedef name, the following is just as good:

    typedef struct Node {
      int data;
      struct Node *next;
    } Node;
    

    There is no name clash because these names live in different namespaces.

    Another valid method is like this:

    typedef struct Node Node;
    struct Node {
        int data;
        Node *next;
    };