Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Can anyone explain why this needs to be a macro? What does this get you over a plain function?


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.


Thanks! Helpful as always.


The "field" argument cannot be passed as an argument to a normal function in C. FWIW, you could pass it as an argument in C++ (which supports pointers to members), but in C++ there are numerous better ways of implementing this.


It's intended to be used with lists with different payloads, all "inheriting" fields from a standard list structure (usually another macro expansion).




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: