[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ppThrow () flaws
> This works fine as long as ppThrow is evaluated. But if it's not,
> ResumeNormalWork () is called even if (correct == false). That's wrong.
> "ppThrow (..)" has to be replaced by "return errorindicator" in that case.
The if..else cases of most macros tend to be delicate. I use:
#ifdef DEBUG
#define MyThrow(x,y) do { printf("failure %ld : %s\n", x, y); } while(0)
#else
#define MyThrow(x,y) do { } while(0)
#endif
Notice, there is no semicolon.
This is a normal statement that's evaluated once, and lets you declare
temporary variables safely -- even in C. Any compiler worth it's salt
will optimize out the loop. About the only thing you can't do is use
the macro as an r-value.
Matt
/* Matt Slot, Bitwise Operator * One box, two box, yellow box, blue box. *
* <fprefect@ambrosiasw.com> * <http://www.ambrosiasw.com/~fprefect/> */