Это всегда один в C99, раздел 6.5.3.4:
При нанесении на операнд, который имеет символьный тип, без знака полукокса, или подписанных полукокса, (или квалифицированной ее разновидность) в результатом является 1.
Редактировать: не часть вашего вопроса, но для интереса от Harbison and Steele, 3rd ed. (pre c99) стр. 148:
Устройство хранения принимается за объем памяти, занимаемый одним характера; размер объекта типа char
поэтому 1.
Edit: В ответ на ваш обновленный вопрос, следующий вопрос и ответ от Харбисона и Стила актуальна (.. там же, Ex 4 гл 6) :
ли допустимо, чтобы иметь реализацию C , в котором тип char
может представлять значения в диапазоне от -2147483648 через 2,147,483,647? Если да, то что будет sizeof(char)
в рамках этой реализации? Что будет be самый маленький и самый большой расстояния тип int
?
ответа (там же, стр 382.):
Это разрешено (если расточительно) для реализации использовать 32 бита для представляют собой тип char
. Вне зависимости от реализация, значение sizeof(char)
всегда 1.
Хотя это конкретно не случай, когда, скажем байт 8 бит и char
являются 4 из этих байтов (на самом деле невозможно с определением C99, смотри ниже), тот факт, что sizeof(char) = 1
всегда ясно из c99 и Харбисон и Стил.
Edit: На самом деле (это в ответ на ваш вопрос UPD 2), насколько c99 обеспокоен sizeof(char)
в байтах, из раздела 6.5.3.4 снова:
SizeOf урожайности оператор размер (в байтах) операнда
так, в сочетании с приведенной выше цитаты, байт 8 бит и char
как 4 из этих байтов невозможно: для C99 байт является такой же, как char
.
В ответ на ваше упоминание о возможности 7-битного char
: это невозможно в c99. В соответствии с разделом 5.2.4.2.1 в стандарте минимум составляет 8:
их реализации определены значения должны быть равны или больше [курсив мой] по величине к показанным, с тем же знаком.
- количество бит для наималейшего объекта, который не является битовым полем (байты)
**CHAR_BIT 8**
- минимальное значение для объекта типа подписанного полукокса
**SCHAR_MIN -127//−(27−1)**
- максимальное значение для объект типа подпись char
**SCHAR_MAX +127//27−1**
- максимальное значение для объекта типа unsigned char
**UCHAR_MAX 255//28−1**
- минимальное значение для объекта типа полукокса
**CHAR_MIN** see below
- максимальное значение для объекта типа полукокса
**CHAR_MAX** see below
[...]
Если значение объекта типа char рассматривается как подписанное целое число er, когда используется в выражении, значение CHAR_MIN должно быть таким же, как у SCHAR_MIN, а значение CHAR_MAX должно быть таким же, как значение SCHAR_MAX. В противном случае значение CHAR_MIN должно быть 0, а значение CHAR_MAX должно быть таким же, как и у UCHAR_MAX. Значение UCHAR_MAX должно равняться 2^CHAR_BIT - 1.
Что вас действительно беспокоит? Вам не нравится называть sizeof()? –
Я обеспокоен стандартом C99. Я тесно сотрудничаю с компиляторами C99 – osgx
Поскольку Unicode становится еще более важным, могут возникнуть нестандартные компиляторы, которые используют символы Unicode как 'char' (вместо' wchar'.) Даже если в стандарте указано, что 'sizeof (char)' must 1, я бы не стал полагаться на это предположение. –