C99 と C11 (少なくともそれらの最終ドラフト) の両方で、 、 、 、 in の存在がuint_least8_t
署名uint_least16_t
さuint_least32_t
れuint_least64_t
た<stdint.h>
バリアントと共に必要であることがわかりました。
1 から 64 までuint_least{N}_t
のすべてのNが利用可能であるという要件は合理的だと思います。これが当てはまらない正当な理由はありますか?実装が 8、16、32、および 64 を提供する必要がある場合、 Nのすべてのより小さい値の実装が実現可能であることは確かです (たとえばtypedef uint_least16_t uint_least15_t;
、x86 の場合などは明らかです)。
私が尋ねているuint_least21_t
のは、単一の Unicode コードポイントを格納する型が必要であることに気付いたからです。これは、その値U+0000
をU+10FFFF
含む (Unicode 4.0 で導入された制約) の間の任意の値を持つことができます。一部のターゲット アーキテクチャに (たとえば) 高速な 24 ビット整数が含まれている場合は、これがより正確な選択になると思います。現在、私は大きなプリプロセッサ セクションで立ち往生しており、適切な型を選択するために 21 から 32 までのNdefined(UINT_LEAST{N}_MAX)
をテストしています。