Re: Force 'char' to be implemented as 'unsigned char'?
<JoshuaMaurice@gmail.com> wrote in message
news:d3b71c1e-d37c-4886-88a2-c7439586fbd2@a1g2000hsb.googlegroups.com...
Replying to rancis Glassborow <francis.glassbo...@btinternet.com> On
Aug 19, 2:18 pm,wrote.
We've had this exchange going where I incorrectly implied real
hardware uses ASCII with an 8bit parity check to implement C++ chars.
I admit that was wrong. However, it did finally hit me what the
documentation of the OP was getting at.
Quoting the quote in the OP:
"Specify in your compiler configuration that plain 'char' is
implemented
as 'unsigned char'. Justification: Support 8-bit ASCII for
internationalisation. The size and sign of char is implementation-
defined. If the range of type char corresponds to 7-bit ASCII, and 8-
bit
characters are used, unpredictable behaviour may result. Otherwise
prefer
to use wchar_t type."
When they say 8-bit ASCII, they probably mean LATIN 1 or something
similar, which Windows has a nasty habit of referring to as "ASCII".
Actually, 8 bit characters on DOS/Windows based systems over 127 were
refered to as "Extended ASCII". Googling "Extended ASCII" provides enough
hits so anyone curioius can go look.
In this case, if your char is a signed value, and you try to assign
this signed value to a larger character, like a UTF32 character, the
hardware may do sign extension, resulting in not what you intended.
I guess there can be all kinds of pitfalls with converting char to numeric
values and back depending if the value was signed or not. A few times it
may be undefined what the actual result would be.
My other point that C++ chars may not be encoded as ASCII (or contain
ASCII as a subset) is still valid, and it should be taken into
account.
I tend to agree. There are some C functions working on characters that
return an int value instead of a char value to be able to return EOF. I
think those may have difficulties going into a char of undetermined signage.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]