title: Design issue in C
body: <p>I'm struggling with a design issue, and I'm trying to find the "Best Practice" answer for my situation.</p>
  
  <p>Say I have a file called <code>Logger.c</code> (And <code>Logger.h</code>) that is responsible for logging actions in my program.</p>
  
  <p>I want logger to be referenced by all my modules, so each module's has a 
  <code>#include Logger.h</code>.</p>
  
  <p>Say I have a module called <code>NTFS.c</code> that is responsible for interaction with the NTFS FS, This module has special structs that are defined in its header, for example: <code>NTFS_Partition.</code></p>
  
  <p>Here is the problem:</p>
  
  <p>On one hand, I want logger to be able to print to a log file a formatted representation of NTFS_Partition, and by that I must <code>#include NTFS.h</code> in <code>Logger.h</code>.</p>
  
  <pre><code>(Inside Logger.h)
  
  #include NTFS_Partition
  VOID Log_Partition(NTFS_Partition *part);
  </code></pre>
  
  <p>On the other hand, I am not sure Logger should re-reference modules that reference him.</p>
  
  <p>Currently I'm seeing a two main choices:</p>
  
  <p>1.Logger.h includes NTFS.h, and NTFS.c include Logger.h (This works)</p>
  
  <p>2.I create a new header file called NTFS_Types.h that would be shared accross all the
   modules, and would only contain the deceleration of NTFS structs (like NTFS_Partition).</p>
  
  <p>Thanks a lot,
  Michael.</p>