title: correctly declaring the main() function in ANSI C
body: <p>The C standard say:</p>
  
  <blockquote>
    <p>The function called at program startup
    is named main. The implementation
    declares no prototype for this
    function. It shall be defined with a
    return type of int and with no
    parameters:</p>
  
  <pre><code>int main(void) { /* ... */ }
  </code></pre>
    
    <p>or with two parameters (referred to
    here as argc and argv, though any
    names may be used, as they are local
    to the function in which they are
    declared):</p>
  
  <pre><code>int main(int argc, char *argv[]) { /*
  ... */ }
  </code></pre>
    
    <p>or equivalent or in some other
    implementation-defined manner.</p>
  </blockquote>
  
  <p>However, Kernighan &amp; Ritchie in their second edition (the canonical ANSI C) bible just use:</p>
  
  <pre><code>main()
  {
    /* taram pampam ... */
  
    return 0;
  }
  </code></pre>
  
  <p>Who is right?
  Does it have to do with function without return value automatic assume to be returning <code>int</code> in C?</p>