[snip]
C requires char to be at least 8 bits, but it can be more. All
other types have to be multiples (including 1) of the size of
char.
That seems to prohibit a four bit type, which would be especially
useful on a four bit processor.
There's no reason a conforming implementation couldn't provide its
own four-bit data types, including arrays of such data types. The
rule that all non-bitfield types must be multiples of 'char' in
width applies only to Standard-defined types, not to types provided
as part of extensions.
You've made a common mistake here. You start with a statement
about something you think an implementation might benefit from
doing, and use that to draw a conclusion about what the Standard
allows. The reasoning process needs to go the other direction:
start with what the Standard allows (or more importantly in this
case, what it effectively prohibits), and show that a conforming
implementation could act as suggested and still not violate any
requirements. The reasoning given above proves nothing at all.
Interesting... So in this particular case, the Standard's definitions
that we might expect to apply to all object types needn't apply, because
these rules only apply to Standard-defined types. So actually, perhaps
we don't need to bother calling these subjects "types" at all, so as not
to confuse them with the usual Standard notions. In that case
That seems to prohibit a four bit type, which would be especially
useful on a four bit processor.
appears to be agreeable. We could call them "extendo-types," just like
"nobjects," else-thread. Interesting...