title: How to understand this para and what information is expressed
body: <h2>in K&amp;R C, 2nd Edition, Page 42</h2>
  <blockquote>
  <p>Since an argument of a function call is an expression, type conversion also takes place when arguments are passed to functions. In the absence of a function prototype, char and short become int, and float becomes double. This is why we have declared function arguments to be int and double even when the function is called with char and float.</p>
  </blockquote>
  <hr />
  <h2>my question is</h2>
  <ul>
  <li>confused with the last sentence: if a function func is called with char and float, why don't declare it as  <code>return_type func(char, float);</code> directly?</li>
  <li>One thing I can think of is that it may be more efficient to pass integer and double. But after argumets-passing, it still needed to convert them into char and float, does this really efficient?</li>
  </ul>
  <pre><code>/* lower: convert c to lower case; ASCII only */
  int lower(int c)  // why don't declare c as char?
  {
      if (c &gt;= 'A' &amp;&amp; c &lt;= 'Z')
          return c + 'a' - 'A';
      else
          return c;
  }
  </code></pre>