title: Why is the format specifier for uint8_t and uint16_t the same (%u)?
body: <p>I only found pretty unrelated questions due to the tons of results searching for <code>printf()</code>.</p>
  
  <p>Why does <code>uint8_t</code> not specify its own format string but any other type does?</p>
  
  <p>As far as I understand <code>printf()</code>, it has to know the length of the supplied parameters to be able to parse the variable argument list.</p>
  
  <p>Since <code>uint8_t</code> and <code>uint16_t</code> use the same format specifier <code>%u</code>, how does <code>printf()</code> "know" how many bytes to process? Or is there somehow an implicit cast to <code>uint16_t</code> involved when supplying <code>uint8_t</code>?</p>
  
  <p>Maybe I am missing something obvious.</p>