Compare, contrast, weep:
((bar*)foo->bar)->gar->member = ((adapter*)(ptr + 4))->sequence_number++;
(Real code, struct and member names changed to protect the guilty)
With:
struct bar* bar = foo->bar; struct gar* gar = bar->gar; struct adapter* adapter = (ptr + 4); gar->member = adapter->sequence_number++;
I just spent a couple of minutes making sure that the second version is functionally equivalent to the first, and I’m still not sure. Think about it – a couple of minutes for ONE line of code. Code should be written for people first, compilers second. Say no to gratuitous obfuscation, say yes to intermediate variables!