2 つのオブジェクトのサイズの違いを表すために使用する必要がある C の型はどれですか?
size_t
署名されていないので、次のようなものです
size_t diff = sizeof (small_struct) - sizeof (big_struct);
明らかに正しくないでしょうし、署名された実際の同等物はないように私には思えます。
ptrdiff_t
魅力的に聞こえますが、
- その名前が示すように、ポインターを減算するためのものです。
- たとえば、DOS のようなセグメント化されたプラットフォームでは、16 ビットで表現できる最大オブジェクト サイズが 64k であると読みました。ただし、far ポインターは、16 ビットのセグメント値と 16 ビットのオフセット値で構成されます。
ptrdiff_t
そのようなプラットフォームでも 32 ビットになるのではないでしょうか? その場合、2 つのオブジェクトのサイズの違いは 16 ビットで十分ですが、ptrdiff_t を使用すると 32 ビット幅の変数が得られるため、最適ではありません。
では、そのような値を扱うのに適した移植可能な型は何でしょうか?
Edit:
私はssize_tについて知っていますが、それは
- 標準 C の一部ではありません。
- 実際にはそのような使用を意図したものではなく、サイズまたは (負の) エラー値を返すためのものです。