title: About Tentative definition
body: <p>I read from a book about tentative defination that,</p>
  
  <blockquote>
    <p>A tentative definition is any external data declaration that has no
    storage class specifier and no initializer. A tentative definition
    becomes a full definition if the end of the translation unit is
    reached and no definition has appeared with an initializer for the
    identifier</p>
  </blockquote>
  
  <p>Please explain what the above statement means.
  Also, the difference between Declaration and Definition? I got mixed up due to this. :(
  And why doesn't this program give an error:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  
  int a;      //Tentative definition
  int a;      //similarly this declaration too.
  int main()  //not getting any error with this code why its so?
  {
      printf("hi");
  } 
  </code></pre>
  
  <p>Also, what is wrong with this code:</p>
  
  <pre><code>#include&lt;stdio.h&gt;
  printf("Hi");
  int main(void){
      return 0;
  }
  </code></pre>