【发布时间】:2012-09-27 23:34:18
【问题描述】:
我发现 C99 标准中有一个声明否认 char 类型和有符号字符/无符号字符类型之间的兼容性。
C99 标准注释 35:
在limits.h 中定义的CHAR_MIN 将具有值0 或SCHAR_MIN 之一,这可用于区分这两个选项。无论做出何种选择,char 都是与其他两个不同的类型,并且与任何一个都不兼容。
我的问题是,为什么委员会否认兼容性?理由是什么?如果 char 与 signed char 或 unsigned char 兼容,会发生可怕的事情吗?
【问题讨论】:
-
问题是,如果
char与您机器上的其中一个兼容,那么它将与其他一些系统上的另一个兼容。这一切都取决于底层硬件。委员会决定将其制成三种不同的类型作为折衷方案。 -
@Vaughn Cato 相关但不一样。我不明白兼容性的含义。
-
@BoPersson 你的评论真的很有帮助。我对兼容性的含义不是很清楚。你能解释一下什么是兼容的以及提出这个概念的原因吗?对于基本类型,是否兼容等于相同?
-
@junwanghe - 一个普通的
char具有与 eithersigned char或unsigned char相同的表示和值。出于效率原因,C 使用底层硬件提供的任何内容。这意味着char在不同的计算机上会略有不同。已选择将 char 类型设为三种不同的类型,即使其中两种在其他方面完全相同(但并非所有系统上的两种类型都相同)。对于其他类型,如int、signed int和int是同一类型,只是char比较特殊。
标签: c char compatibility