最近、Cプログラムでデータ型int32_t
に出会いました。私はそれが32ビットを格納することを知っていますが、int
とint32
は同じことをしませんか?
また、プログラムでchar
を使用したいと思います。代わりにint8_t
を使用できますか?違いはなんですか?
要約すると:Cのint32、int、int32_t、int8、int8_tの違いは何ですか?
int32
とint32_t
の間(および同様にint8
とint8_t
の間)の違いは非常に単純です:C標準はint8_t
とint32_t
を定義しますが、int8
またはint32
という名前は定義しません-後者(存在する場合)はおそらく他のヘッダーまたはライブラリ(C99でint8_t
およびint32_t
が追加される前の可能性が高い)。
プレーンなint
は、他のものとはかなり異なります。 int8_t
およびint32_t
のサイズがそれぞれ指定されている場合、int
は16ビット以上の任意のサイズにできます。さまざまな時点で、16ビットと32ビットの両方がかなり一般的でした(64ビットの実装では、おそらく64ビットにする必要があります)。
一方、int
は、Cのすべての実装に存在することが保証されていますが、int8_t
およびint32_t
は存在しません。ただし、これがあなたにとって重要であるかどうかは疑問に思うかもしれません。小規模な組み込みシステムや古いコンパイラでCを使用している場合、問題になる可能性があります。主にデスクトップ/サーバーマシンの最新のコンパイラで使用する場合は、おそらく使用しません。
おっと-char
に関する部分を見逃した。整数型のサイズが正確に8ビットであることを保証したい場合にのみ、charの代わりにint8_t
を使用します。文字を保存する場合は、おそらくchar
を代わりに使用する必要があります。サイズは(ビット数で)異なりますが、正確に1バイトであることが保証されています。ただし、ちょっと変わった点があります。プレーンなchar
が署名されているか署名されていないかについての保証はありません(多くのコンパイラーは、コンパイル時フラグに応じてどちらかを作成できます)。署名されているか署名されていないことを確認する必要がある場合は、明示的に指定する必要があります。
_tデータ型はstdint.hヘッダーのtypedef型ですが、intは組み込みの基本データ型です。これにより、stdint.hが存在する場合にのみ_tが使用可能になります。一方、intは存在することが保証されています。
明示的に指定されていない場合、 'size'は可変であるため、宣言する場合は常に留意してください
int i = 10;
一部のシステムでは、コンパイラによって16ビット整数になり、他のシステムでは32ビット整数(または新しいシステムでは64ビット整数)になる場合があります。
組み込み環境では、これは奇妙な結果になる可能性があります(特にメモリマップドI/Oの処理中、または単純な配列状況を考慮する場合)。したがって、固定サイズの変数を指定することを強くお勧めします。レガシーシステムでは、出くわす可能性があります
typedef short INT16;
typedef int INT32;
typedef long INT64;
C99以降、デザイナーは基本的に同様のtypedefを活用するstdint.hヘッダーファイルを追加しました。
Windowsベースのシステムでは、stdin.hヘッダーファイルに次のエントリが表示される場合があります。
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef unsigned char uint8_t;
最小幅の整数型または正確な幅の整数型のようなものにはかなり多くのものがありますが、理解を深めるためにstdint.hを調べることは悪いことではないと思います。