Please don't use parentheses like this while testing for pre-processor symbols:
#if defined (FOO) && defined (BAR) || !defined (BAZ) do something #endif
Instead, write something like:
#if defined FOO && defined BAR || !defined BAZ do something #endif