ebh@hou4b.UUCP (09/12/84)
[send me mail if you don't see this line] from Waiming Mok: #define spaces(n) do {int i=(n);while (i--) putchar(' ');}while (0) You don't need the do .. while construct, just make a compound statement: #define spaces(n) {int i=(n);while(i--) putchar(' ');} Remember, anywhere <statement> can go, {<decl-list>; <statement> ...} can go. One problem can crop up: what if i is used elsewhere in the code? Imagine what spaces(i) would do. Therefore, it's wise to use some name that you never use in regular coding, like _. Also, make _ a register variable to avoid the overhead of allocating more stack space, and for the obvious speed and space advantages. Thus the final version looks like this: #define spaces(n) {int _=(n);while(_--) putchar(' ');} And yes, things like spaces(foo*2) do work. -Ed Horch {houxm,ihnp4,akgua}!hou4b!ebh p.s. On systems that support it, #define spaces(n) printf("%*s", (n), ""); works just as well.