I'm often use do-while(0) construct in my #defines, for the reasons described in this answer. Also I'm trying to use as high as possible warning level from compiler to catch more potential problem and make my code more robust and cross-platform. So I'm typically using
foo.c(36) : warning C4127: conditional expression is constant
Summary: This warning (C4127) in this particular case is a subtle compiler bug. Feel free to disable it.
It was meant to catch situations when logical expression evaluates to a constant in non-obvious situations (such as,
if(a==a && a!=a), and somehow, it turned
while(true) and other useful constructs into invalid.
Microsoft recommends using
for(;;) for infinite loop if you want to have this warning on, and there is no solution for your case. This is one of very few Level-4 warnings my company's development conventions allow to disable.