title: why is char's sign-ness not defined in C?
body: <p>The C standard states:</p>
  
  <p>ISO/IEC 9899:1999, 6.2.5.15 (p. 49)</p>
  
  <blockquote>
    <p>The three types char, signed char, and
    unsigned char are collectively called
    the character types. The
    implementation shall define char to
    have the same range, representation,
    and behavior as either signed char or
    unsigned char.</p>
  </blockquote>
  
  <p>And indeed <a href="http://www.network-theory.co.uk/docs/gccintro/gccintro_71.html" rel="noreferrer">gcc</a> define that according to target platform.</p>
  
  <p>My question is, why does the standard do that? I can see nothing that can come out of ambiguous type definition, except of hideous and hard to spot bugs.</p>
  
  <p>More than so, in ANSI C (before C99), the only byte-sized type is char, so using char for math is sometimes inevitable. So saying "one should never use char for math" is not so true. If that was the case, a saner decision was to include three types "<code>char</code>,<code>ubyte</code>,<code>sbyte</code>".</p>
  
  <p>Is there a reason for that, or is it just some weird backwards-compatibility gotcha, in order to allow bad (but common) compilers to be defined as standard compatible?</p>