C 標準には次のように記載されています。
ISO/IEC 9899:1999、6.2.5.15 (p. 49)
char、signed char、unsigned char の 3 つの型をまとめて文字型と呼びます。実装では、signed char または unsigned char と同じ範囲、表現、および動作を持つように char を定義する必要があります。
実際、gccはターゲット プラットフォームに従ってそれを定義します。
私の質問は、なぜ標準がそうするのですか? 厄介で見つけにくいバグを除いて、あいまいな型定義から生じるものは何も見えません。
さらに、ANSI C (C99 より前) では、バイトサイズの型は char のみであるため、数学に char を使用することは避けられない場合があります。したがって、「数学に char を使用してはならない」というのは正しくありません。char
その場合は、「 、ubyte
、 」の3 つのタイプを含めた方が賢明sbyte
です。
それには理由がありますか、それとも、悪い (しかし一般的な) コンパイラを標準互換として定義できるようにするための、奇妙な後方互換性の問題ですか?