title: Why do C programmers use typedefs to rename basic types?
body: <p>So I'm far from an expert on C, but something's been bugging me about code I've been reading for a long time: can someone explain to me why C(++) programmers use typedefs to rename simple types? I understand why you would use them for structs, but what exactly is the reason for declarations I see like</p>
  
  <pre><code>typedef unsigned char uch;
  typedef uch UBYTE;
  typedef unsigned long ulg;
  typedef unsigned int u32;
  typedef signed short s16;
  </code></pre>
  
  <p>Is there some advantage to this that isn't clear to me (a programmer whose experience begins with Java and hasn't ventured far outside of strictly type-safe languages)? Because I can't think of any reason for it--it looks like it would just make the code less readable for people unfamiliar with the project.</p>
  
  <p>Feel free to treat me like a C newbie, I honestly know very little about it and it's likely there are things I've misunderstood from the outset. ;)</p>