In that case, I suggest you write something like:
#if defined WINDOWS
// do thing one
#elif defined MAC
// do thing two
#elif defined OS_370
// do thing three
#else
// unsupported OS; do nothing
#endif
A macro, by itself, is just one piece of text which is
replaced with another by the preprocessor. To get the above
scheme to work, you'll have to define "WINDOWS", "MAC", etc.
in your compiler's settings for the various configurations for
your program. In Visual Studio, use the per-configuration
project settings to do this. ("Preprocessor" tab.) For other
compilers, consult your manual.
Macros are not compiler specific, no. Their behavior is defined
by the C and C++ standards. For more info, read ISO/IEC-14882.
You can buy a copy from ANSI over the web for $30:
http://webstore.ansi.org/ansidocstore/product.asp?sku=INCITS/ISO/IEC+14882-2003
Look in chapter 16, "Preprocessing Directives".
Details of how your compiler USES macros are compiler-specific,
though. Read your compiler's manual for more.