この回答と添付のコメントで、Pavel Minaevuint8_t
は、C ではtypedef できる唯一の型はchar
andであるという次の引数を作成しますunsigned char
。私はC標準のこのドラフトを見ています。
- の存在
uint8_t
は、対応する型int8_t
(7.18.1p1) の存在を意味します。 int8_t
幅は 8 ビットで、パディング ビットはありません (7.18.1.1p1)。- 対応する型は同じ幅 (6.2.5p6) であるため、
uint8_t
8 ビット幅でもあります。 unsigned char
ビット幅ですCHAR_BIT
(5.2.4.2.1p2 および 6.2.6.1p3)。CHAR_BIT
少なくとも 8 (5.2.4.2.1p1) です。CHAR_BIT
uint8_t
が であるかunsigned char
、幅が(6.2.6.1p4)unsigned char
の倍数である非ビットフィールド型であるため、最大 8です。CHAR_BIT
この議論に基づいて、uint8_t
存在する場合、それと両方unsigned char
が同じ表現を持つことに同意します。8つの値ビットと0のパディングビットです。それはそれらを同じタイプにすることを強制していないようです(たとえば、6.2.5p14)。
uint8_t
と同じ表現で拡張符号なし整数型 (6.2.5p6) に typedef されることは許可されunsigned char
ますか? unsigned char
確かにそれは typedef (7.18.1.1p2) である必要があり、 (またはchar
たまたま符号なしである場合)以外の標準の符号なし整数型にすることはできません。この架空の拡張型は文字型 (6.2.5p15) ではないため、互換性のない型 (6.5p7) のオブジェクトへのエイリアス アクセスの対象にはなりません。もの。