The C standard (ISO/IEC 9899:2011 or 9899:1999) defines a type ptrdiff_t
in <stddef.h>
.
The POSIX standard (ISO/IEC 9945; IEEE Std 1003.1-2008) defines a type ssize_t
in <sys/types.h>
.
ssize_t
is not the same as for ptrdiff_t
?ptrdiff_t is used for pointer arithmetic and array indexing, if negative values are possible. Programs that use other types, such as int, may fail on, e.g. 64-bit systems when the index exceeds INT_MAX or if it relies on 32-bit modular arithmetic.
The size of size_t and ptrdiff_t always coincide with the pointer's size. Because of this, it is these types that should be used as indexes for large arrays, for storage of pointers and pointer arithmetic.
Is there an implementation where the underlying base type for ssize_t is not the same as for ptrdiff_t?
x86-16 with the large memory model. Pointers are far (32-bit), but individual objects are limited to one segment (so size_t
is allowed to be 16-bit).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With