Це завжди одне в C99, розділ 6.5.3.4:
При застосуванні до операнда, який має тип char, unsigned char або подписаний char (або його кваліфіковану версію), результат дорівнює 1.
Редагувати: не частина вашого запитання, але для зацікавлення від Harbison and Steele, 3rd edition. (до c99) с. 148:
За одиницю зберігання приймається обсяг пам’яті, зайнятий одним символом; тому розмір об’єкта типу char1.
Редагувати: У відповідь на ваше оновлене запитання є актуальним наступне запитання та відповідь Харбісона та Стіла (там же, Вип. 4 розділу 6):
Чи допустимо мати реалізацію C, в якій тип charможе представляти значення від -2,147,483,648 до 2,147,483,647? Якщо так, то що буде sizeof(char)
під цим впровадженням? Який би був найменший і найбільший діапазони типу int?
Відповідь (там же, с. 382):
Для реалізації дозволено (якщо марнотратне) використовувати 32 біти для представлення типу char. Незалежно від реалізації, значення
sizeof(char)завжди дорівнює 1.
Хоча це конкретно не стосується випадку, коли, скажімо, байти складають 8 бітів і charє 4 з цих байтів (насправді неможливо з визначенням c99, див. Нижче), той факт, що sizeof(char) = 1завжди видно зі стандарту c99 та Harbison and Steele.
Edit: Насправді (це у відповідь на ваше запитання UPD 2), наскільки c99 стурбований sizeof(char) знаходиться в байтах, з розділу 6.5.3.4 знову:
Оператор sizeof видає розмір (у байтах) його операнда
отже, у поєднанні з цитатою вище, байти по 8 бітів і charяк 4 з цих байт неможливі: для c99 байт - це те саме, що a char.
У відповідь на вашу згадку про можливість 7-бітного char: це неможливо в c99. Відповідно до розділу 5.2.4.2.1 стандарту мінімум становить 8:
Їх значення, визначені реалізацією, мають бути рівними або більшими [мій наголос] за величиною до тих, що показані, з однаковим знаком.
- кількість бітів для найменшого об'єкта, який не є бітовим полем (байт)
**CHAR_BIT 8**
- мінімальне значення для об'єкта типу, підписаного символом
**SCHAR_MIN -127//−(27−1)**
- максимальне значення для об'єкта типу, підписаного символом
**SCHAR_MAX +127//27−1**
- максимальне значення для об'єкта типу unsigned char
**UCHAR_MAX 255//28−1**
- мінімальне значення для об'єкта типу char
**CHAR_MIN** see below
- максимальне значення для об'єкта типу char
**CHAR_MAX** see below
[...]
Якщо значення об'єкта типу char при використанні у виразі обробляється як підписане ціле число, значення CHAR_MIN має бути таким самим, як значення SCHAR_MIN, а значення CHAR_MAX має бути таким же, як значення SCHAR_MAX. В іншому випадку значення CHAR_MIN має дорівнювати 0, а значення CHAR_MAX має бути таким же, як значення UCHAR_MAX. Значення UCHAR_MAX має дорівнювати 2 ^ CHAR_BIT - 1.