Re: polishing one
Preprocessor macros are probably the second best way to shoot yourself in the foot after gotos (if not the best way).
They can be genuinely useful when implemented properly, but I've seen far too many cases where it went pear shaped due to macro expansion issues (hint: braces and/or brackets), or unintended macro redefinition issues somewhere in the include path - especially when cross-compiling stuff.
So: use them wisely and sparingly :-).