Re: at least 260 packages broken on arm, powerpc and s390 due to wrong assumption on char signedness
On 31-Dec-01, 16:30 (CST), Peter Finderup Lund <firefly@diku.dk> wrote:
> On 31 Dec 2001, Colin Walters wrote:
> > No, the C standard guarantees that a char is exactly a single byte; i.e.
> > sizeof(char) == 1.
>
> I think he meant "wider than one would think"-character. A char didn't
> originally have to be 8 bits wide -- the first edition of K & R "The C
> Programming Language" explicitly mentions an implementation with 9-bit
> chars.
>
> I think the newer standards say you have to use 8-bit chars but with some
> sort of "cat flap" clause that allows exceptions if the platform is a
> weird DSP or something like that.
Nope, the standard says that
1. sizeof(char) == 1
2. the range of signed char is *at least* -127 -> +127
3. the range of unsigned char is *at least* 0 -> 255
4. "plain" char shall act like one of (2) or (3)
The net effect is that chars are *at least* 8 bits wide, but may be
wider. The macro "CHAR_BIT" in limits.h will tell if if you really need
to know.
There is no requirement that char be exactly 8 bits; no cat flap
required.
Steve
Reply to: