title: Compile time conditional inclusion. Segmenting headers vs including whole implementations
body: <p>I'm refactoring a codebase with a large number of long header files (for ease of use, and to simplify compilation, the headers contain both the interface and the implementation). </p>
  
  <p>The codebase avoids polymorphism like wildfire, and hence it resolves an internal storage type using macros like so:</p>
  
  <pre><code>#if defined USE_NIBBLE_CODES
  #include "nibble.h"
  #elif defined USE_BUTECODES 
  #include "byte.h"
  ....
  #endif
  </code></pre>
  
  <p>My question is, assuming that the aforementioned implementation header files have a large amount of lines in common, would it be preferable to merge them into one, and use the macros to separate the differences between implementations. </p>