 <p>The wording is a bit confusing. The whole paragraph is talking about the case where no prototype has been declared for the function at the time it is called, so the section you highlighted is for the case where no prototype is declared when the function is called, but a prototype is used when the function is defined. Here is an example:</p> <pre><code>int main(int argc,char** argv) { f(3.0f); /* undefined behavior */ g(3.0); /* undefined behavior */ } int f(float v) { return v; } int g(double v,...) { return v; } </code></pre> <p>In this example, when <code>f</code> is called, no prototype has been declared, so <code>3.0f</code> is promoted to a <code>double</code>. However, the function is later defined with a prototype which takes a <code>float</code> instead of a <code>double</code>, so the behavior is undefined.</p> <p>Likewise for <code>g</code>, the behavior is undefined because the elipses are used in the prototype of the definition.</p>