What purpose does the empty do{}while(0); statement serve here?
if (cond)
MACRO;
and the macro won't expand incorrectly to if (cond)
foo;
bar;
I personally just go the anal retentive route and use brackets everywhere.if(x){defer} will be wrong, but it'll be wrong in a different way.