typedef struct b b; b *a; struct b { int c; int d, **clshead; int **ahead; unsigned h; } glob; int k(); int main() { a = &glob; k(a); } #define e(f) f - g->c static void m(b *g, int *l) { if (g) *g->ahead = l; } int k(b *g) { if (g->d) m(g, e(g->clshead[-1])); return g->h; }