Missing APIs (continued) Each #ifdef is a separate code path Exponential complexity for each level of nesting Difficult to get test coverage of all paths (even compilation coverage can be hard) Complex code == more bugs == more security bugs Better to replace the function in a separate file Keeps main code clean of replacement junk (you can see the point of the code, not portability goop) Placing code in a library makes it available throughout a package (it will probably be needed more than once) Can be independantly unit tested