Trick 1
The trick is to have a linked list and using the offsetof to find the actual address of the struct.
Trick 2
And a struct containing a function accepting itself, which ensure that you can add new params in the sturct, without modifying rest of the code.