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