But check this out:
#define SOME_MACRO( foo, bar ) \
do \
{ \
foo(); \
bar(); \
} while (0) // warning: conditional expression
// is constant
That's the only possible way to correctly enforce using a semicolon following a call to SOME_MACRO(a,b);Most insidiously, you can't wrap the macro with #pragma warning (push, disable, pop) because it's a macro. So the warning can only be suppressed where you call it, not where it's defined!
That's why I globally disable this warning in all my projects. I've never been saved by it, and it's sucked away enough of my life.