title: Forward declarations in functions
body: <p>I have a problem with using forward declarations in functions. Usually in global scope we can use address of undefined variable which declared using <code>extern</code> keyword. Look at the simple example.</p>
  
  <pre><code>typedef struct Id {
      int a;
  }  xIdRec;
  
  typedef xIdRec* IdN;
  
  typedef struct ChId{
      int a;
      IdN* b;
  }  ChIdRec;
  
  extern ChIdRec Evn;
  IdN Arr[] = {(IdN)&amp;Evn};
  ChIdRec Evn = {8, Arr};    
  </code></pre>
  
  <p>But how I can use this code during function definition? We can try use it like this.</p>
  
  <pre><code>void F (){
      typedef struct Id {
          int a;
      }  xIdRec;
  
      typedef xIdRec* IdN;
  
      typedef struct ChId{
          int a;
          IdN* b;
      }  ChIdRec;
  
      extern ChIdRec Evn;
      IdN Arr[] = {(IdN)&amp;Evn};
      ChIdRec Evn = {8, Arr}; 
  }
  </code></pre>
  
  <p>But now we have an error — <code>error C2086: 'ChIdRec Evn' : redefinition</code>.
  We can remove first declaration of <code>Evn</code>, but we will have another error — <code> error C2065: 'Evn' : undeclared identifier</code>.</p>
  
  <p>How I can solve this bit problem?</p>