?
Die relevante Stelle im Standard liest sich so:
ISO/IEC 9889:1999, 6.2.5 schrieb:
13 The three types char, signed char, and unsigned char are collectively called the character types. **The implementation shall define char to have the same range, representation, and behavior as either signed char or unsigned char.**35)
Fußnote 35: CHAR_MIN, defined in <limits.h>, will have one of the values 0 or SCHAR_MIN, and this can be used to distinguish the two options. Irrespective of the choice made, char is a separate type from the other two and is not compatible with either.
Hervorhebung von mir.
Dabei ist char übrigens nicht auf ASCII festgelegt. Der Standard garantiert lediglich Folgendes:
ISO/IEC 9889:1999, 6.2.5 schrieb:
3 An object declared as type char is large enough to store any member of the basic execution character set. If a member of the basic execution character set is stored in a char object, its value is guaranteed to be nonnegative. If any other character is stored in a char object, the resulting value is implementation-defined but shall be within the range of values that can be represented in that type.
Das basic execution character set ist implementationsabhängig (5.2.1 (1)), wobei eine Reihe von Dingen darüber garantiert werden. Seinerzeit wird damit vor allem gemeint gewesen sein, dass die Implementation entscheidet, ob sie ASCII oder EBCDIC benutzt.