2

マシンワードサイズ(の合理的な解釈)に対応し、互いに同じサイズであることが保証されている、符号付きと符号なしの標準整数型のペアが必要です。

クリーンなアドレスモデルを備えたプラットフォームでは、法案intptr_tuintptr_t適合しているため、それらを使用することは確かに可能です。

ただし、問題のコードをさまざまな組み込みシステムで実行する必要がある可能性があります。これらのいくつかは、最大の効率的な整数型がポインターよりも小さい286スタイルのアーキテクチャーを備えたCPUをまだ使用していると思います-そうでない場合は修正してください-そうである場合は、作成される場合があります小さい整数型を使用するため。

その小さい整数型はおそらくとに対応しsize_tますptrdiff_tが、これらの型は互いに同じサイズであることが保証されていますか?符号付きタイプと符号なしタイプの間で損失なく前後に変換できる必要があります。

他に考慮すべきことはありますか?

4

3 に答える 3

2

あなたは使用することができsize_tますssize_t.

アップデート:

これは確かtypedefに目的であるため、次のようになります。

typedef size_t uword_t;
typedef ssize_t word_t;

size_tC99はあるが、Posixがないシステムに出くわした場合は、次のssize_tいずれかを実行できます。

  1. word_tそのシステムに対して条件付きで1回だけ定義する-または-
  2. おそらく<unistd.h>、そのシステムに独自のものを提供します。ローカル環境の完全な知識で定義ssize_tし、遭遇した他の欠落しているPosixnessをクリーンアップすることもできます。
于 2012-04-22T07:02:30.483 に答える
1

なぜただ使用intしないのunsigned intですか?

C99 6.2.5/6タイプ

符号付き整数型ごとに、同じ量のストレージ(符号情報を含む)を使用し、同じ配置要件を持つ、対応する(ただし異なる)符号なし整数型(キーワードunsignedで指定)があります。

于 2012-04-22T06:56:37.477 に答える
0

私はzmccordが正しいと判断しました。これは、intptr_t利用uintptr_t可能であることが保証されているタイプであり、明確かつ明確に十分なタイプです。特定の変数を特定のプラットフォームの変数よりも小さくする必要がある場合は、必要な特定のサイズで宣言できます。

于 2012-04-23T08:01:43.233 に答える