マクロで複文を扱うときに
#define XXX() do { 複文 } while(0)
こう書くと

if (cond) XXX(); else ・・・;

if (cond) {XXX();} else {・・・;}

どっちの形で書かれても動く。