On Sun, 2006-07-02 at 17:53 -0700, Rusmin Susanto wrote: > 3. Why do you write everything in > > do .. while(0) pattern? > > while(0) will always fail (I think). So there is no loop
So macros behave more like how you expect them to. Try this: #define FOO(x) { return x; } int main() { int a; if (a) FOO(a); } That works fine. But change it to this: int main() { if (a) FOO(a); else return a; } ...and the compiler will hate you. The reason begin that you're trying to use FOO like you would a function statement (ie, the semicolon). If you change the call to just "FOO(x)" without the semicolon, it works fine and the compiler doesn't flip out when it finds the else statement. #define FOO(x) do { return x; } while(0) This makes the macro behave more like a function, so things like if/else will work the way you expect. _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list