Стандартные состояния C:
ISO/IEC 9899: 1999, 6.2.5.15 (стр. 49)
Три типа char, подписанный char и unsigned char совместно называются типы символов. реализация должна определять charимеют одинаковый диапазон, представление, и поведение как подписанное char, так и unsigned char.
И действительно gcc определяют, что в соответствии с целевой платформой.
Мой вопрос: почему стандарт делает это? Я не вижу ничего, что могло бы возникнуть из двусмысленного определения типа, за исключением отвратительных и трудно различимых ошибок.
Более того, в ANSI C (до C99) единственным типом размера байта является char, поэтому использование математики char иногда неизбежно. Поэтому говорить "никогда не следует использовать char для математики", это не так. Если бы это было так, более разумное решение состояло в том, чтобы включить три типа "char
, ubyte
, sbyte
".
Есть ли причина для этого, или это просто какая-то странная совместимость с обратной совместимостью, чтобы дать возможность плохим (но общим) компиляторам быть стандартным совместимым?