Speaking of portability,
here's a link to Henry Spencer and Geoff Collyer's classic 1992 USENIX
paper
#ifdef
Considered Harmful, or Portability Experience With C News.
We believe that a C programmer's impulse to use #ifdef in an attempt at
portability is usually a mistake. Portability is generally the result of
advance planning rather than trench warfare involving #ifdef.
It's been eighteen years since its publication, but not enough people
have read that paper yet.