title: Old style C function declaration
body: <p>Here's a simple function delcared and defined using old style syntax:</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  void
  error(message,a1,a2,a3,a4,a5,a6,a7)
          char *message;
          char *a1,*a2,*a3,*a4,*a5,*a6,*a7;
  {
    fprintf(stderr,message,a1,a2,a3,a4,a5,a6,a7);
  }
  int main ()
  {
    error("[ERROR %d]: %s.\n",110,"Connection timed out");
    return 0;
  }
  </code></pre>
  
  <p>It can be compiled and runs correctly to print:</p>
  
  <blockquote>
    <p>[ERROR 110]: Connection timed out.</p>
  </blockquote>
  
  <p>I read that this style doesn't have associated prototype, but how can it convert int to char * automatically at runtime and even the provided arguments are fewer than it's declared?</p>