2012-05-01 13 views
8

ptrdiff_tの符号なしの対応先とは何ですか? 同様に、size_tの署名された対応部分は何ですか?ptrdiff_tの符号なしの対応は何ですか?

私が達成しようとしているのは、大きな値を気にせずにptrdiff_t変数の正の値を格納するために使用できる符号なし型を持つことです。これはsize_tと思われます。

逆に、大きめの値を気にせずに、size_tの値を格納できる符号付きの型を使用したいと思います。

+0

'intptr_t'があります。http://stackoverflow.com/questions/1464174/size-t-vs-intptr-t – IronMensan

+0

@IronMensan確かにあなたは' uintptr_t'を意味します! (無印の場合はu) –

+0

標準を見てみましたか? –

答えて

8

私はptrdiff_t(no uptrdiff_t)に正式な署名されていない対応があるとは思わないが、size_tを使用するとかなり合理的である。

POSIXでは、size_tの符号付き部分はssize_tです。これは、例えばread()のような関数によって返される型です。

これは、ssize_tptrdiff_tの基になるタイプが異なる実装がほとんど存在しないことを示しています。

4

size_tは、オブジェクトサイズを表すために使用されます。コンパイラ作成者は負のサイズのオブジェクトを作成しないと広く考えられていました。

あなたが比較されているかに応じて、違いを取得ptrdiff_t`と、その符号付きの型は理にかなっていることに注意してください(合理的な値については、符号なしの型にこれを変更することは自明である):

5.7加法演算子

結果が提供されるスペースに収まらない場合は、[...]は、任意の他の算術オーバーフローと同様に、動作は未定義である。[...]

したがって、「非常に大きな値」の特殊なタイプを作成する必要があるかもしれません。

+0

答えを読んで、私は 'ssize_t'が存在しないと思います。 – mfontanini

+1

@fontanini:標準Cでは、 'ssize_t'型はありません。これはC標準へのPOSIX拡張です。 –

+0

これは標準的な定義だと思っています。私の悪い:D – mfontanini

関連する問題