title: typedef a struct before it's declared
body: <p>I'm not a beginner, I'm very familiar with the following idiom:</p>
  
  <pre><code>typedef struct Foo_ Foo;// I know typedef struct Foo Foo is fine, I'm just trying to make it clearer
  struct Foo_
  {
      int value;
      Foo *link;
  };
  </code></pre>
  
  <p>I'm just suddenly feel confused, because  my understanding is that it's not allowed to use a name(identifier) before it's declared. But in the declaration <code>typedef struct Foo_ Foo</code>, the identifier <code>Foo_</code> does not yet exist! How come the compiler permit this happen? Would anybody please shed some light on this, explain to me what's the justification for this kind of syntax? </p>
  
  <p>Wikipedia quote : The purpose of <code>typedef</code> is to assign alternative names to EXISTING types.</p>
  
  <p>--- >8 ---</p>
  
  <p>Thank you all guys for so much helpful information. </p>