128

int32_t最近、Cプログラムでデータ型に出くわしました。32ビットを格納することは知っていますが、そうではintありint32ませんか?

charまた、プログラムで使いたいです。int8_t代わりに使用できますか?違いはなんですか?

要約すると、Cのint32、int、int32_t、int8、int8_tの違いは何ですか?

4

3 に答える 3

147

int32との間int32_t(および同様に と の間int8)int8_tの違いは非常に単純です。C 標準ではint8_tandが定義されていますが、 orint32_tという名前は何も定義されていません。後者 (存在する場合) は、おそらく他のヘッダーまたはライブラリ (ほとんどC99でのandの追加よりも前のものです)。int8int32int8_tint32_t

無地intは他とはかなり違います。int8_tとそれぞれint32_tに指定されたサイズがあり、 int16 ビット以上の任意のサイズにすることができます。さまざまな時期に、16 ビットと 32 ビットの両方がかなり一般的でした (64 ビットの実装では、おそらく 64 ビットである必要があります)。

一方、intは C のすべての実装に存在することが保証されていますが、int8_tとは存在しint32_tません。ただし、これがあなたにとって重要かどうかは、おそらく疑問の余地があります。小さな組み込みシステムや古いコンパイラで C を使用している場合、問題が発生する可能性があります。デスクトップ/サーバー マシン上の最新のコンパイラで主に使用する場合は、おそらくそうではありません。

おっと -- についての部分を見逃していましたcharint8_t正確に 8 ビットのサイズを保証する整数型が必要な場合 (およびその場合にのみ)、char の代わりに使用します。文字を保存したい場合は、char代わりに使用することをお勧めします。そのサイズは (ビット数に関して) 変動する可能性がありますが、正確に 1 バイトであることが保証されています。ただし、少し奇妙な点が 1 つあります。プレーンが署名されているか署名されていないかについての保証はありませんchar(多くのコンパイラは、コンパイル時のフラグに応じて、どちらかにすることができます)。署名されているか署名されていないかを確認する必要がある場合は、明示的に指定する必要があります。

于 2013-01-25T05:32:40.930 に答える
25

_t データ型は stdint.h ヘッダーの typedef 型ですが、int は組み込みの基本データ型です。これにより、 stdint.h が存在する場合にのみ _t が使用可能になります。一方、 int は存在​​することが保証されています。

于 2013-01-25T05:35:29.183 に答える