int32_t
最近、Cプログラムでデータ型に出くわしました。32ビットを格納することは知っていますが、そうではint
ありint32
ませんか?
char
また、プログラムで使いたいです。int8_t
代わりに使用できますか?違いはなんですか?
要約すると、Cのint32、int、int32_t、int8、int8_tの違いは何ですか?
int32_t
最近、Cプログラムでデータ型に出くわしました。32ビットを格納することは知っていますが、そうではint
ありint32
ませんか?
char
また、プログラムで使いたいです。int8_t
代わりに使用できますか?違いはなんですか?
要約すると、Cのint32、int、int32_t、int8、int8_tの違いは何ですか?
int32
との間int32_t
(および同様に と の間int8
)int8_t
の違いは非常に単純です。C 標準ではint8_t
andが定義されていますが、 orint32_t
という名前は何も定義されていません。後者 (存在する場合) は、おそらく他のヘッダーまたはライブラリ (ほとんどC99でのandの追加よりも前のものです)。int8
int32
int8_t
int32_t
無地int
は他とはかなり違います。int8_t
とそれぞれint32_t
に指定されたサイズがあり、 int
16 ビット以上の任意のサイズにすることができます。さまざまな時期に、16 ビットと 32 ビットの両方がかなり一般的でした (64 ビットの実装では、おそらく 64 ビットである必要があります)。
一方、int
は C のすべての実装に存在することが保証されていますが、int8_t
とは存在しint32_t
ません。ただし、これがあなたにとって重要かどうかは、おそらく疑問の余地があります。小さな組み込みシステムや古いコンパイラで C を使用している場合、問題が発生する可能性があります。デスクトップ/サーバー マシン上の最新のコンパイラで主に使用する場合は、おそらくそうではありません。
おっと -- についての部分を見逃していましたchar
。int8_t
正確に 8 ビットのサイズを保証する整数型が必要な場合 (およびその場合にのみ)、char の代わりに使用します。文字を保存したい場合は、char
代わりに使用することをお勧めします。そのサイズは (ビット数に関して) 変動する可能性がありますが、正確に 1 バイトであることが保証されています。ただし、少し奇妙な点が 1 つあります。プレーンが署名されているか署名されていないかについての保証はありませんchar
(多くのコンパイラは、コンパイル時のフラグに応じて、どちらかにすることができます)。署名されているか署名されていないかを確認する必要がある場合は、明示的に指定する必要があります。
_t データ型は stdint.h ヘッダーの typedef 型ですが、int は組み込みの基本データ型です。これにより、 stdint.h が存在する場合にのみ _t が使用可能になります。一方、 int は存在することが保証されています。