title: Why does a function prototype with an empty argument list conflicts with one that has a char argument?
body: <p>With the code below, both clang and gcc called with -std=c11 complain about conflicting types for foo.</p>
  
  <pre><code>int foo();
  
  int main(void) {
    return foo(0);
  }
  
  int foo(char a) {
     return a;
  }
  </code></pre>
  
  <p>According to the answer in <a href="https://stackoverflow.com/a/13950800/1078224">https://stackoverflow.com/a/13950800/1078224</a>, in (older?) C standards the type int has been assumed when no variable type was given. However, the C11 standard draft (<a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf" rel="nofollow noreferrer">http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf</a>), section 6.7.6.3, $14 says that</p>
  
  <blockquote>
    <p>The empty list in a function declarator that is not part of a
    definition of that function specifies that no information about the number or types of the
    parameters is supplied.</p>
  </blockquote>
  
  <p>From this I conclude that the code above should be actually valid. Or am I missing some other relevant section of the standard?</p>