Il est toujours l'un en C99, section 6.5.3.4:
Lorsqu'il est appliqué à un opérande qui a
type de char, unsigned char, ou signé
char, (ou d'une version de celui-ci)
le résultat est 1.
Edit: pas partie de votre question, mais pour l'intérêt de Harbison et Steele, 3ème ed. (pré c99) p. 148:
Une unité de stockage est pris pour le
quantité de stockage occupé par un
caractère; la taille d'un objet de
type char
est donc 1.
Edit: En réponse à la mise à jour de votre question, la question suivante et sa réponse de Harbison et Steele est pertinente (ibid, Ex. 4 de Ch. 6):
Est-il permis d'avoir une C
mise en œuvre dans le type char
peut
représentent des valeurs allant de
-2 147 483 648 à de 2 147 483 647? Si oui, quel serait sizeof(char)
en vertu de cette mise en œuvre? Ce serait
être la plus petite et la plus grande des plages de
type int
?
Réponse (ibid., p. 382):
Il est permis (si inutiles) pour un
la mise en œuvre utilisation de 32 bits pour
représenter type char
. Indépendamment de
la mise en œuvre, la valeur de
sizeof(char)
est toujours 1.
Bien que ce ne traitent pas précisément un cas où, disons octets de 8 bits et d' char
4 de ces octets (en fait impossible avec le c99 définition, voir ci-dessous), le fait qu' sizeof(char) = 1
toujours est clair à partir du standard c99 et Harbison et Steele.
Edit: En fait (c'est en réponse à votre upd 2 question), autant que le c99 est concerné sizeof(char)
est en octets, à partir de la section 6.5.3.4 de nouveau:
L'opérateur sizeof donne la taille
(en octets) de son opérande
donc, combinée avec la citation ci-dessus, les octets de 8 bits, et char
que 4 de ces octets est impossible: c99, un octet est le même que pour un char
.
En réponse à votre mention de la possibilité d'un 7 bits char
: ce n'est pas possible en c99. Conformément à l'article 5.2.4.2.1 de la norme, le minimum est de 8:
Leur mise en œuvre-la définition des valeurs doit être égale ou supérieure à [mes italiques] en importance à celles indiquées, avec le même signe.
- nombre de bits pour le plus petit objet, qui n'est pas un bits (octet)
**CHAR_BIT 8**
- valeur minimale pour un objet de type signed char
**SCHAR_MIN -127//−(27−1)**
- le maximum de valeur pour un objet de type signed char
**SCHAR_MAX +127//27−1**
- le maximum de valeur pour un objet de type unsigned char
**UCHAR_MAX 255//28−1**
- valeur minimale pour un objet de type char
**CHAR_MIN** see below
- le maximum de valeur pour un objet de type char
**CHAR_MAX** see below
[...]
Si la valeur d'un objet de type char
est traité comme un entier signé lors de l'
utilisé dans une expression, la valeur de
CHAR_MIN doit être le même que celui de
SCHAR_MIN et la valeur de CHAR_MAX
doit être le même que celui de
SCHAR_MAX. Sinon, la valeur de
CHAR_MIN est 0 et la valeur de
CHAR_MAX doit être le même que celui de
UCHAR_MAX. La valeur UCHAR_MAX
doit être égal à 2^CHAR_BIT − 1.