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
の場合と同じではない実装はありますか?Ssize_tの基礎となる基本タイプがptrdiff_tの場合と同じではない実装はありますか?
大容量メモリモデルのx86-16。ポインタは遠い(32ビット)が、個々のオブジェクトは1つのセグメントに制限されている(したがって、size_t
は16ビットにすることができます)。
Open Group Base Specification Issue 7、IEEE Std 1003.1、2013 Edition、 <sys/types.h>
の説明は次のように述べています。
タイプssize_tは、少なくとも[-1、SSIZE_MAX]の範囲の値を格納できます。
言い換えると、ssize_t
は署名されていますが、but表現できる負の値のセットは、{-1}だけに制限される場合があります。
一方、ptrdiff_t
は、より対称的な正/負の範囲を持つことが保証されています。
実際には、ssize_t
が負の範囲でこれほど制限される可能性は低いと思われますが、可能です。
もちろん、別の違いは、標準のCまたはC++でプログラミングしているときはいつでもptrdiff_t
を使用できることですが、標準のPOSIXシステムをターゲットにしていない限りssize_t
は使用できない場合があります。