title: Why do I need headers?
body: <p>I have simple program in two units:</p>
  
  <p>count_words.c:</p>
  
  <pre><code>int main( int argc, char ** argv )
  {
      printf("starting\n");
      int i =  aaa(55555);
      printf("%d",i);
      printf("ending\n");
      return i;
  }
  </code></pre>
  
  <p>clean.c:</p>
  
  <pre><code>int aaa(int i)
  {
      printf("aaa\n");
      return 5;
  }
  </code></pre>
  
  <p>Makefile:</p>
  
  <pre><code>count_words:  clean.o count_words.o  -lfl
          gcc count_words.o clean.o -lfl -ocount_words 
  
  %.o:%.c
          gcc -c -o $@ $&lt;
  </code></pre>
  
  <p>Program builds fine and runs, but in <code>count_words.c</code> I didn't include header file with function <code>int aaa(int)</code> declaration from <code>clean.c</code> . Why I need to have header file at all since I have no problem to compile program without them?</p>