title: Why do we need the 'extern' keyword in C if file scope declarations have external linkage by default?
body: <p>AFAIK, any declaration of a variable or a function in file scope has external linkage <strong>by default</strong>. <code>static</code> mean "it has internal linkage", <code>extern</code> -- "it maybe defined elsewhere", not "it has external linkage".</p>
  
  <p>If so, why we need <code>extern</code> keyword? In other words, what is difference between <code>int foo;</code> and <code>extern int foo;</code> (file scope)?</p>