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とint32_t、しかし、名前の何も定義していませんint8かint32- (彼らはすべてに存在する場合)、後者をいくつかの他のヘッダやライブラリから、おそらくある(最も可能性が高いですint8_tおよびint32_tC99での追加よりも前からです。
プレーンintは他のものとはかなり異なります。ここで、int8_tとint32_t指定された各サイズを有する、int任意のサイズ> = 16ビットとすることができます。時々、16ビットと32ビットの両方がかなり一般的でした(64ビットの実装では、おそらく64ビットであるはずです)。
一方、intCのすべての実装に存在することが保証されているint8_tとint32_tされません。これがあなたにとって重要であるかどうか疑問に思われるかもしれません。小さな組み込みシステムや古いコンパイラでCを使用している場合は、問題がある可能性があります。主にデスクトップ/サーバーマシンの最新のコンパイラーで使用する場合、おそらく使用されません。
おっと-一部を逃したchar。int8_t正確に8ビットのサイズであることが保証された整数型が必要な場合(かつその場合のみ)、charの代わりに使用します。文字を格納したい場合は、おそらくchar代わりに使用したいでしょう。サイズは(ビット数の点で)異なる場合がありますが、正確に1バイトであることが保証されています。ただし、少し奇妙な点が1つあります。プレーンcharが署名されているか、署名されていないかは保証されていません(多くのコンパイラは、コンパイル時のフラグに応じて、どちらでもかまいません)。署名されているかどうかを確認する必要がある場合は、明示的に指定する必要があります。
明示的に指定されていない場合は '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を探索することは悪いことではないと思います。
typedef short INT16;ではなくtypedefs short INT16。
bool_t-これまで聞いたことがない。C標準では_Bool組み込み型として定義されています。boolが#include <stdbool.h>(に展開されるマクロとして)の場合にのみ定義されます_Bool。