title: Why create an include/ directory in C and C++ projects?
body: <p>When I work on my personal C and C++ projects I usually put <code>file.h</code> and <code>file.cpp</code> in the same directory and then <code>file.cpp</code> can reference <code>file.h</code> with a <code>#include "file.h"</code> directive.</p>
  
  <p>However, it is common to find out libraries and other kinds of projects (like the linux kernel and freeRTOS) where all <code>.h</code> files are placed inside an <code>include/</code> directory, while <code>.cpp</code> files remain in another directory. In those projects, <code>.h</code> files are also included with <code>#include "file.h"</code> instead of <code>#include "include/file.h"</code> as I was hoping.</p>
  
  <p>I have some questions about all of this:</p>
  
  <ol>
  <li>What are the advantages of this file structure organization?</li>
  <li>Why are <code>.h</code> files inside <code>include/</code> included with <code>#include "file.h"</code> instead of <code>#include "include/file.h"</code>? I know the real trick is inside some Makefile, but is it really better to do that way instead of making clear (in code) that the file we want to include is actually in the <code>include/</code> directory?</li>
  </ol>