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