C标准规定:
ISO/IEC 9899:1999, 6.2.5.15(第 49 页)
char、signed char 和 unsigned char 这三种类型统称为字符类型。实现应将 char 定义为与有符号字符或无符号字符具有相同的范围、表示和行为。
确实gcc根据目标平台定义了它。
我的问题是,为什么标准会这样做?除了可怕且难以发现的错误之外,我看不到任何来自模棱两可的类型定义的东西。
不仅如此,在 ANSI C(C99 之前)中,唯一的字节大小类型是 char,因此有时不可避免地使用 char 进行数学运算。所以说“一个人永远不应该使用 char 进行数学运算”并不是那么正确。如果是这样的话,更明智的决定是包括三种类型“ char
, ubyte
, sbyte
”。
这是有原因的,还是只是一些奇怪的向后兼容问题,以便允许将糟糕的(但常见的)编译器定义为标准兼容?