Are there machines (or compilers), where sizeof(char) != 1?
Does C99 standard says that sizeof(char) on standard compliance implementation MUST be exactly 1? If it does, please, give me section number and citation.
Update:
If I have a machine (CPU), which can’t address bytes (minimal read is 4 bytes, aligned), but only 4-s of bytes (uint32_t), can compiler for this machine define sizeof(char) to 4?sizeof(char) will be 1, but char will have 32 bits (CHAR_BIT macros)
Update2:
But sizeof result is NOT a BYTES ! it is the size of CHAR. And char can be 2 byte, or (may be) 7 bit?
Update3:
Ok. All machines have sizeof(char) == 1. But what machines have CHAR_BIT > 8 ?
It is always one in C99, section 6.5.3.4:
Edit: not part of your question, but for interest from Harbison and Steele’s. C: A Reference Manual, Third Edition, Prentice Hall, 1991 (pre c99) p. 148:
Edit: In answer to your updated question, the following question and answer from Harbison and Steele is relevant (ibid, Ex. 4 of Ch. 6):
Answer (ibid, p. 382):
While this does not specifically address a case where, say bytes are 8 bits and
charare 4 of those bytes (actually impossible with the c99 definition, see below), the fact thatsizeof(char) = 1always is clear from the c99 standard and Harbison and Steele.Edit: In fact (this is in response to your upd 2 question), as far as c99 is concerned
sizeof(char)is in bytes, from section 6.5.3.4 again:so combined with the quotation above, bytes of 8 bits and
charas 4 of those bytes is impossible: for c99 a byte is the same as achar.In answer to your mention of the possibility of a 7 bit
char: this is not possible in c99. According to section 5.2.4.2.1 of the standard the minimum is 8: