4

stdatomic.h タイプandのバージョンであるand がatomic_uint_least16_t含まれているように見えますが、含まれていません。なんで?atomic_uint_fast16_t_Atomicstdint.h uint_least16_tuint_fast16_tatomic_uint16_t


N1548 ドラフトの背景情報については、次のとおりです。

7.18.1.1 正確な幅の整数型

1 typedef 名intN_tは、幅 N、パディング ビットなし、および 2 の補数表現を持つ符号付き整数型を指定します。したがって、int8_t正確に 8 ビット幅の符号付き整数型を示します。

2 typedef 名uintN_tは、幅 N でパディング ビットのない符号なし整数型を指定します。したがって、uint24_t正確に 24 ビット幅の符号なし整数型を示します。

3 これらのタイプはオプションです。ただし、実装が幅が 8、16、32、または 64 ビットで、パディング ビットがなく、2 の補数表現を持つ (符号付きの型の場合) 整数型を提供する場合、対応する typedef 名を定義する必要があります。

7.18.1.2 最小幅の整数型

1 typedef 名int_leastN_tは、幅が少なくとも N の符号付き整数型を指定します。これより小さなサイズの符号付き整数型が少なくとも指定された幅を持つことはありません。したがって、int_least32_t少なくとも 32 ビット幅の符号付き整数型を示します。

2 typedef 名uint_leastN_tは、少なくとも N の幅を持つ符号なし整数型を指定します。これより小さなサイズの符号なし整数型が少なくとも指定された幅を持つことはありません。したがって、uint_least16_t少なくとも 16 ビット幅の符号なし整数型を示します。

3 次のタイプが必要です。

int_least8_t
int_least16_t
int_least32_t
int_least64_t
uint_least8_t
uint_least16_t
uint_least32_t
uint_least64_t

このフォームの他のタイプはすべてオプションです。

int_fast(など、 N _t/ uint_fastN_tタイプなどを含める)

段落3で強調する価値があります。

ただし、実装が幅が 8、16、32、または 64 ビットで、パディング ビットがなく、2 の補数表現を持つ (符号付きの型の場合) 整数型を提供する場合、対応する typedef 名を定義する必要があります。

これは、たとえば、2 の補数表現の 16 ビット整数として実装されるintorのような型がある場合、実装で定義する必要があることを意味します。shortint16_t

atomic_型はN1548<stdatomic.h>にもリストされています(以下に再現)が、実装に aがある場合に対応する要件はありません--- それが私の質問の性質です。int16_tatomic_int16_t

7.17.6 アトミック整数とアドレス型

1 次の表の各行では、原子型名が対応する直接型として宣言されています。

Atomic type name         Direct type
----------------         -----------
atomic_char              _Atomic char
atomic_schar             _Atomic signed char
atomic_uchar             _Atomic unsigned char
atomic_short             _Atomic short
atomic_ushort            _Atomic unsigned short
atomic_int               _Atomic int
atomic_uint              _Atomic unsigned int
atomic_long              _Atomic long
atomic_ulong             _Atomic unsigned long
atomic_llong             _Atomic long long
atomic_ullong            _Atomic unsigned long long
atomic_char16_t          _Atomic char16_t
atomic_char32_t          _Atomic char32_t
atomic_wchar_t           _Atomic wchar_t
atomic_int_least8_t      _Atomic int_least8_t
atomic_uint_least8_t     _Atomic uint_least8_t
atomic_int_least16_t     _Atomic int_least16_t
atomic_uint_least16_t    _Atomic uint_least16_t
atomic_int_least32_t     _Atomic int_least32_t
atomic_uint_least32_t    _Atomic uint_least32_t
atomic_int_least64_t     _Atomic int_least64_t
atomic_uint_least64_t    _Atomic uint_least64_t
atomic_int_fast8_t       _Atomic int_fast8_t
atomic_uint_fast8_t      _Atomic uint_fast8_t
atomic_int_fast16_t      _Atomic int_fast16_t
atomic_uint_fast16_t     _Atomic uint_fast16_t
atomic_int_fast32_t      _Atomic int_fast32_t
atomic_uint_fast32_t     _Atomic uint_fast32_t
atomic_int_fast64_t      _Atomic int_fast64_t
atomic_uint_fast64_t     _Atomic uint_fast64_t
atomic_intptr_t          _Atomic intptr_t
atomic_uintptr_t         _Atomic uintptr_t
atomic_size_t            _Atomic size_t
atomic_ptrdiff_t         _Atomic ptrdiff_t
atomic_intmax_t          _Atomic intmax_t
atomic_uintmax_t         _Atomic uintmax_t

2 これらの型に対する操作のセマンティクスは、7.17.7 で定義されています。

3atomic_boolタイプはアトミックブール値を提供します。

4atomic_address型はアトミックな void * 操作を提供します。加減算の単位は 1 バイトとする。

5 注意 アトミック整数型とアドレス型の表現は、対応する通常の型と同じサイズである必要はありません。既存のコードを移植するために必要な労力を軽減するため、可能な限り同じサイズにする必要があります。

4

2 に答える 2