The GCC developers talked about making uint8_t something other than unsigned char and figured they would probably get lynched if they did that (because uint8_t aliasing rules would be different). While the standard agrees with you, practice is somewhat different.