Es ist immer ein in C99, Abschnitt 6.5.3.4:
Wenn auf einen Operanden angewandt, die Typen char, unsigned char hat oder char signiert, (oder eine qualifizierte Version davon) die Ergebnis ist 1.
Edit: nicht Teil Ihrer Frage, aber für Interesse von Harbison und Steele, 3. Ausgabe. (vor c99) p. 148:
Eine Speichereinheit wird als die Menge an Speicher von einem Zeichen besetzt werden; char
die Größe eines Objekts von Typ ist daher 1.
Edit: In Antwort auf Ihre Frage aktualisiert, die folgende Frage und Antwort von Harbison und Steele ist relevant (. Ebd., Ex 4 von Ch 6) :
Ist es zulässig, bei der eine C Implementierung zu haben Typ char
von -2.147.483.648 durch 2147483647 Werte im Bereich darstellen kann? Wenn ja, was wäre sizeof(char)
unter dieser Implementierung? Was wäre die kleinsten und größten Bereiche von type int
?
Antwort (ibid, S. 382).:
Es erlaubt ist (wenn verschwenderisch) für eine Implementierung 32 Bits verwenden repräsentieren Typ char
. Unabhängig von der Implementierung ist der Wert sizeof(char)
immer 1.
Während dies ausdrücklich keinen Fall ansprechen, wo, sagen Bytes sind 8 Bits und char
sind 4 dieser Bytes (eigentlich unmöglich mit der c99 Definition siehe unten), die Tatsache, dass sizeof(char) = 1
immer klar ist, aus der c99 Standard und Harbison und Steele.
Edit: In der Tat (dies ist als Antwort auf Ihre upd 2 Frage), soweit c99 sizeof(char)
betrifft, ist in Bytes, aus dem Abschnitt 6.5.3.4 wieder:
Der Operator sizeof Ausbeuten die Größe (in Bytes) des Operanden
so mit dem Zitat oben kombiniert, Bytes von 8 Bits und char
als 4 dieser Bytes ist unmöglich: für C99 ein Byte das gleiche wie ein char
ist.
Als Antwort auf Ihre Erwähnung der Möglichkeit eines 7-Bit char
: Dies ist nicht in c99 möglich. 5.2.4.2.1 des Standards der Minimum Abschnitt nach ist 8:
Ihre Umsetzung definierter Werte sind oder mehr [Hervorhebung von mir] in der Größe zu den gezeigten, mit dem gleichen Vorzeichen gleich sein.
- Anzahl der Bits, die für kleinstes Objekt, das nicht ein Bit-Feld (Byte) ist
**CHAR_BIT 8**
- Minimalwert für ein Objekt vom Typ
signed char
**SCHAR_MIN -127//−(27−1)**
- Maximalwert für ein Objekt vom Typ signiert char
- Maximalwert für ein Objekt vom Typ unsigned char
**UCHAR_MAX 255//28−1**
- Minimalwert für ein Objekt vom Typ char
**CHAR_MIN** see below
- Maximalwert für ein Objekt vom Typ char
**CHAR_MAX** see below
[...]
Wenn der Wert eines Objekts vom Typ char als signed integ behandelt wird Wenn in einem Ausdruck verwendet wird, muss der Wert CHAR_MIN der gleiche sein wie SCHAR_MIN und der Wert von CHAR_MAX muss mit dem Wert SCHAR_MAX übereinstimmen. Andernfalls muss der Wert CHAR_MIN 0 sein und der Wert CHAR_MAX muss mit UCHAR_MAX übereinstimmen. Der Wert UCHAR_MAX wird 2^CHAR_BIT gleich - 1.
Worüber machen Sie sich Sorgen? Sie mögen es nicht, sizeof() aufzurufen? –
Ich bin besorgt in C99 Standard-Compliance. Ich arbeite eng mit C99-Compilern – osgx
Da Unicode noch wichtiger wird, könnten nicht-standard Compiler kommen, die Unicode-Zeichen als 'char' verwenden (anstelle von' wchar'.) Auch wenn der Standard besagt, dass 'sizeof (char)' muss sei 1, würde ich mich nicht auf diese Annahme verlassen. –