【发布时间】:2020-04-15 16:55:06
【问题描述】:
对于每个有符号整数类型,标准保证存在一个对应的无符号整数类型。 6.2.5 p6:
对于每个有符号整数类型,都有一个对应的(但 不同的)无符号整数类型(用关键字
unsigned指定 ) 使用相同的存储量(包括符号信息) 并且具有相同的对齐要求。
用关键字 unsigned 指定的短语让我感到困惑,我查阅了该标准的早期版本以了解它是否存在。 C89/3.2.1.5 提供完全相同的措辞:
对于每个有符号整数类型,都有一个对应的(但 不同的)无符号整数类型(用关键字指定
unsigned) 使用相同的存储量(包括符号 信息)并且具有相同的对齐要求。
现在考虑uintptr_t 和intptr_t; uintmax_t 和 intmax_t;等等...(这是可选的,但如果实现定义了这些类型)。
问题:根据我上面引用的定义,uintptr_t 不是intptr_t 对应的无符号整数类型,uintmax_t 是intmax_t 对应的无符号整数类型吗?
我很担心,因为通常的算术转换使用术语6.3.1.8 p1:
否则,两个操作数都转换为无符号整数类型 对应有符号整数类型的操作数的类型
所以我试图理解应用于uintptr_t 和intptr_t 的常用算术转换的语义。
【问题讨论】:
-
这些是 typedef,不是实际的类型。
-
@Barmar 最有可能,但标准 AFAIK 没有定义。
标签: c integer language-lawyer conversion-rank