【发布时间】:2010-10-29 04:37:22
【问题描述】:
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”。
这是有原因的,还是只是一些奇怪的向后兼容问题,以便允许将糟糕(但常见)的编译器定义为标准兼容?
【问题讨论】:
-
Why don't the C or C++ standards explicitly define char as signed or unsigned?。因为在某些架构上 unsigned char 更有效,而在另一些架构上则相反
标签: c gcc standards char unsigned