title: C header file include error
body: <p>Hopefully this is a straightforward question...  Here's my process to reproduce this issue.  First I create my source file:</p>
  
  <pre><code>bash $ cat t.c
  #include "t.h"
  
  int main()
  {
    ABC abc;
  }
  </code></pre>
  
  <p>Then I create my corresponding header file:</p>
  
  <pre><code>bash $ cat t.h
  #ifdef _T_H
  #define _T_H
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  typedef struct abc { 
    int a;
  } ABC;
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif
  </code></pre>
  
  <p>Then, I try to compile it:</p>
  
  <pre><code>bash $ gcc -o t t.c
  t.c: In function ‘main’:
  t.c:5: error: ‘ABC’ undeclared (first use in this function)
  t.c:5: error: (Each undeclared identifier is reported only once
  t.c:5: error: for each function it appears in.)
  t.c:5: error: expected ‘;’ before ‘abc’
  </code></pre>
  
  <p>What is going on?  If I use 'struct abc' instead of 'ABC' as the type in t.c, then it does compile.  Why aren't the typedefs working?</p>