title: Why does an empty declaration work for definitions with int arguments but not for float arguments?
body: <p>I thought the difference is that <code>declaration</code> doesn't have parameter types...</p>
  
  <p>Why does this work:</p>
  
  <pre><code>int fuc();
  
  int fuc(int i) {
    printf("%d", i);
    return 0;
  }
  </code></pre>
  
  <p>but this fails compiling:</p>
  
  <pre><code>int fuc();
  
  int fuc(float f) {
    printf("%f", f);
    return 0;
  }
  </code></pre>
  
  <p>with the message:</p>
  
  <blockquote>
    <p>error: conflicting types for ‘fuc’. note: an argument type that has a default promotion can’t match an empty parameter name list declaration</p>
  </blockquote>