平台为什么选择签名char?

jco*_*der 4 c c++

我看到很多关于签名/未签名字符的答案,但不是这个问题,所以如果已经有答案,请随时关闭/复制.

我知道在C和C++中,数据类型'char'可以是有符号或无符号的.我知道不同的平台选择不同,但是x86和我个人使用的所有其他平台都选择"char"进行签名.

在我看来,选择一个unsigned char有一些小的优点,例如你可以使用该值作为数组索引,如果你想为了对值进行分类,但可能有理由,无论是语言相关,还是在目标架构使签名成为更好的选择.

这些原因是什么?

zwo*_*wol 13

signed关键字已在C89中添加.在此之前,如果您制作char并且unsigned char相同,则无法访问已签名的char大小类型.因此,大多数早期的C ABI定义char为签署.(尽管如此,有例外 - 如果没有任何例外,C89会强制char签署.)

从那时起,我们在代码之间有一个连续的反馈循环,假设char已经签名(因为程序员从未见过它不在哪里,所以为什么还要打字一个额外的单词?)和ABI定义char为签名以确保兼容尽可能多的现有代码.

格林菲尔德语言设计可以制作charint8_t分离基本类型,但是现在C的重要性在于大量的现有代码; 你不可能永远看到这种变化.

(还要记住,在1989年,计算机和应用程序仅支持7位ASCII仍然很常见.因此,签名char文本数据的不便之处则不那么明显.你提到的那些查找表只会有128个条目.对于使用7位文本并使用第8位作为每个字符标志的程序,char8位符号实际上方便.)