In generale su ciascuna macchina diversi tipi di dato coincideranno nella rappresentazione; si tengono distinti perché quello che coincide su una macchina può non coincidere su un'altra. Per esempio adesso ho cambiato abitudine e se prima tendevo a usare "unsigned char" per numeri tra 0 e 255 adesso preferisco usare "uint8_t", così resto libero per esempio di utilizzare le bitmask potendo contare su 8 bit sicuri. Mi pare che lo standard specifichi che un char ha sempre 8 bit ma non solo mi sento a disagio nel dare per scontate le cose, ma differenziando i tipi di dato si migliora la leggibilità anche se poi il compilatore genererà codice identico.