title: Block scope linkage C standard
body: <p><em>The following identifiers have no linkage: an identifier declared to be anything other than an object or a function; an identifier declared to be a function parameter; <strong>a block scope identifier for an object declared without the storage-class specifier extern</strong>.</em></p>
  
  <pre><code>{
      static int a; //no linkage
  }
  </code></pre>
  
  <p><em>For an identifier declared with the storage-class specifier extern in a scope in which a prior declaration of that identifier is visible, if the prior declaration specifies internal or external linkage, the linkage of the identifier at the later declaration is the same as the linkage specified at the prior declaration. If no prior declaration is visible, or <strong>if the prior declaration specifies no linkage</strong>, <strong>then the identifier has external linkage</strong>.</em></p>
  
  <pre><code>{
      static int a; //no linkage
      extern int a; //a should get external linkage, no?
  }
  </code></pre>
  
  <p>GCC error: extern declaration of a follows declaration with no linkage</p>
  
  <p>Can somebody explain me why do I get this error?</p>
  
  <p>Thank you</p>