title: Should a .c file include something that it's .h file already includes?
body: <p>Here is a section on <code>#include</code>'s from <a href="https://google.github.io/styleguide/cppguide.html#Names_and_Order_of_Includes" rel="nofollow noreferrer">Google's C++ style guide</a>:</p>
  <blockquote>
  <p>If you rely on symbols from bar.h, don't count on the fact that you included foo.h which (currently) includes bar.h: include bar.h yourself, unless foo.h explicitly demonstrates its intent to provide you the symbols of bar.h.</p>
  <p>However, any includes present in the related header do not need to be included again in the related cc (i.e., foo.cc can rely on foo.h's includes).</p>
  </blockquote>
  <p>When I read this, these sentences seem to contradict. To me they say:</p>
  <ol>
  <li>If <code>foo.cc</code> needs stuff in <code>bar.h</code>, it must include <code>bar.h</code>.</li>
  <li>If <code>foo.cc</code> needs stuff in <code>bar.h</code>, and <code>foo.cc</code> includes <code>foo.h</code>, and <code>foo.h</code> includes <code>bar.h</code>, then <code>foo.cc</code> doesn't need to include <code>bar.h</code>.</li>
  </ol>
  <p>Why don't these sentences contradict?</p>