struct data { int prio; signed char status; }; struct base { unsigned _num; struct data vec[10]; }; static struct data *ix(struct base *base, unsigned i) { return &base->vec[i]; } struct heap { struct base base; }; struct heap *heap; void increase_insn_priority (int *fld, int amount) { if (ix(heap ? &heap->base : 0, *fld)->status > 0) ix(heap ? &heap->base : 0, *fld)->prio += amount; }