> CHAR_BIT is a minimum of 1 byte (8 bits), but is not guaranteed to be 1.
It seems like you are conflating things. One is, a char does not have to be an octet. That is correct.
The other is the unit for sizeof(char) is always and everywhere 1. That is, the size of everything else is measured relative to char.
Please do see C FAQ[1]. In addition, please see 6.5.3.4.2 in [2]:
> When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1.
It does not matter if char is 11 bits therefore not an octet. That means you are in a universe where a byte is 11 bits long, sizeof(char) is still 1 as far as your program and the compiler are concerned.
Note that the same is true in C++ as well:
> Depending on the computer architecture, a byte may consist of 8 or more bits, the exact number being recorded in CHAR_BIT. sizeof(char), sizeof(char8_t), sizeof(signed char),sizeof(unsigned char), and sizeof(std::byte) are always equal to 1.
HTH.
[1]: http://c-faq.com/charstring/wchar.html
[2]: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
[3]: https://en.cppreference.com/w/cpp/language/sizeof