STM32Fxcortex-M3シリーズプロセッサ用のプログラムを開発しています。stdint.hでは、以下が定義されています。
typedef unsigned int uint_fast32_t;
typedef uint32_t uint_least32_t;
typedef unsigned long uint32_t;
私が理解しているように。
[u]int_fast[n]_t will give you the fastest data type of at least n bits.
[u]int_least[n]_t will give you the smallest data type of at least n bits.
[u]int[n]_t will give you the data type of exactly n bits.
また、私が知る限り、sizeof(unsigned int)<= sizeof(unsigned long)およびUINT_MAX<=ULONG_MAX-常に。
したがって、uint_fast32_tは、uint32_tのサイズ以上のサイズのデータ型であると予想されます。
cortex-M3の場合sizeof(unsigned int)== sizeof(unsigned long)== 4.したがって、上記の定義はサイズに関して「正しい」です。
しかし、なぜそれらは、基礎となるデータ型の名前と論理サイズと一致する方法で定義されていないのですか?
typedef unsigned long uint_fast32_t;
typedef unsigned int uint_least32_t;
typedef uint_fast32_t uint32_t;
誰かが基礎となるタイプの選択を明確にできますか?
'long'と'int'が同じサイズであるとすると、3つの定義すべてに同じデータ型を使用しないのはなぜですか?
typedef unsigned int uint_fast32_t;
typedef unsigned int uint_least32_t;
typedef unsigned int uint32_t;