The idiomatic way you'd express a generic tailq in C with functions is with void-stars, which cost 4-8 bytes and incur the costs of indirecting through another memory address and, probably, of allocating lots of fiddly little structs at random times.
The macro version expresses the same generalized logic but embeds the link pointers in the structure you're queueing.
The macro version expresses the same generalized logic but embeds the link pointers in the structure you're queueing.