From a copy of the ANSI C specification, see Section 3.1.2.5 - Types:
An object declared as type char is
large enough to store any member of
the basic execution character set. If
a member of the required source
character set enumerated in $2.2.1 is
stored in a char object, its value is
guaranteed to be positive. If other
quantities are stored in a char
object, the behavior is
implementation-defined: the values are
treated as either signed or
nonnegative integers.
The concept of "execution character set" is introduced in Section 2.2.1 - Character sets.
In other words, a char has to be at least big enough to contain an encoding of at least the 95 different characters which make up the basic execution character set.
Now add to that the section 2.2.4.2 - Numerical limits
A conforming implementation shall
document all the limits specified in
this section, which shall be specified
in the headers <limits.h>
and
<float.h>
.
Sizes of integral types
The values given below shall be
replaced by constant expressions
suitable for use in #if preprocessing
directives. Their
implementation-defined values shall be
equal or greater in magnitude
(absolute value) to those shown, with
the same sign.
maximum number of bits for smallest
object that is not a bit-field
(byte)
CHAR_BIT 8
minimum value for an object of type
signed char
SCHAR_MIN -127
maximum value for an object of type
signed char
SCHAR_MAX +127
maximum value for an object of type
unsigned char
UCHAR_MAX 255
....
So there you have it - the number of bits in a char must be at least 8.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…