Why unsigned chars not default?
Knudsen
knudsen at ihlpl.ATT.COM
Tue Oct 25 04:35:19 AEST 1988
In article <9563 at pur-ee.UUCP>, mendozag at pur-ee.UUCP (Grado) writes:
> A guy around here is trying to port to several machines a program he
> hacked away in a PC using Lattice C. For some obscure reason in his
> original program he decided to use only low-level I/O. That forced
> him to "split" integers and then save them as 2 bytes and then later
> when the file is read back the integers are put together(!).
At least on a Motorola micro (6809 or 680x0) you can say
write(chan, int, 2) and put out the whole integer at once.
> require him to declare as unsigned char the I/O buffer (which he
> also uses for arithmetic operations) else the chars are negative
> numbers when the their contents represents value > 127. (He does
> a lot of arithmetic with characters representing integers).
This is often a problem. If he doesn't want to declare the buffer
unsigned (or his compiler, like mine, doesn't support unsigned char),
he can replace c with (c & 255) whenever c is used as an int.
> He claims the compilers are at fault and that all the compilers
> should have 'unsigned char' as default for characters so you
> can do all sorts of arithmetic with them.
All compilers should have unsigned char, but why as default?
Half the time you want short-range *signed* variables -128 to +127.
And if no unsigned char type is supported, the (c & 255) fixes it
relatively cheap; the reverse fix (unsigned to signed) is harder.
Also the (c & 255) fix protects you against unknown compilers,
by guaranteeing unsigned no matter what the default is.
I DO wish compilers would tell you somehow what the default is;
the 3B2 compilers seem to default to unsigned char, which breaks
a lot of old EOF loops.
Finally, your friend should minimize char->int conversions as much
as possible; read the stuff in, transfer to an int variable,
and work on that exclusively.
Since he learned C on it, he should now learn some more C by
thoroughly re-working the code for style and efficiency anyway.
I can't stomach some of the stuff I wrote a few years back.
--
Mike Knudsen Bell Labs(AT&T) att!ihlpl!knudsen
"Lawyers are like handguns and nuclear bombs. Nobody likes them,
but the other guy's got one, so I better get one too."
More information about the Comp.lang.c
mailing list