C标准(ISO / IEC 9899:2011或9899:1999)在ptrdiff_t
中定义了<stddef.h>
类型。
POSIX标准(ISO / IEC 9945; IEEE Std 1003.1-2008)在ssize_t
中定义了<sys/types.h>
类型。
ssize_t
的基础基本类型与ptrdiff_t
不同的实现?答案 0 :(得分:27)
是否存在ssize_t的基础类型的实现 与ptrdiff_t不同?
x86-16具有大内存模型。指针远(32位),但单个对象仅限于一个段(因此size_t
允许为16位)。
答案 1 :(得分:21)
Open Group Base Specifications Issue 7,IEEE Std 1003.1,2013 Edition,<sys/types.h>
的描述说:
ssize_t类型能够存储至少在[-1,SSIZE_MAX]范围内的值。
换句话说,ssize_t
已签名,但它可以表示的负值集可能仅限于{-1}。
另一方面,ptrdiff_t
保证具有更加对称的正/负范围。
我承认在实践中,ssize_t
似乎不太可能在负范围内受到限制,但这是可能的。
当然,另一个区别是,只要您使用标准C或C ++进行编程,就可以使用ptrdiff_t
,但除非您的目标是标准POSIX系统,否则ssize_t
可能无法使用。