Semi-experienced C user here, I believe the anonymous block is perfectly adequate here. No idea why they are wrapping it in a single instance do loop, unless they’re unaware of block scoping or I’m unaware of some UB here.
if(x) MACRO();
else something();
expands to if(x) { ... }; // Error!
else something();