stdatomic.h
, по-видимому, содержит atomic_uint_least16_t
и atomic_uint_fast16_t
, которые являются _Atomic
версиями типов stdint.h
uint_least16_t
и uint_fast16_t
, но он не содержит atomic_uint16_t
. Почему?
Для получения некоторой справочной информации из проекта N1548 :
7.18.1.1 Целочисленные типы с точной шириной
1 typedef name int
N _t
обозначает целочисленный тип со знаком шириной N, без битов заполнения и представление с дополнением до двух. Таким образом, int8_t
обозначает такой знаковый целочисленный тип шириной ровно 8 бит.
2 Имя typedef uint
N _t
обозначает беззнаковый целочисленный тип с шириной N и без битов заполнения. Таким образом, uint24_t
обозначает такой беззнаковый целочисленный тип с шириной ровно 24 бита.
3 Эти типы являются необязательными. Однако, если реализация предоставляет целочисленные типы с шириной 8, 16, 32 или 64 бита, без битов заполнения и (для подписанных типов), которые имеют представление с дополнением до двух, она должна определять соответствующие имена typedef.
7.18.1.2 Целочисленные типы минимальной ширины
1 Имя typedef int_least
N _t
обозначает целочисленный тип со знаком шириной не менее N, так что нет знаковый целочисленный тип меньшего размера имеет как минимум заданную ширину. Таким образом, int_least32_t
обозначает целочисленный тип со знаком шириной не менее 32 бита.
2 Имя typedef uint_least
N _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_fast
N _t
и т. Д. c.)
Стоит выделить в параграфе 3:
Однако, если реализация предоставляет целочисленные типы с шириной 8, 16, 32 или 64 бит, без битов заполнения и (для типов со знаком), которые имеют дополнение до двух представление, оно должно определять соответствующие имена typedef.
Это означает, что если, например, у меня есть тип вроде int
или short
, который реализован как 16-битное целое число с двумя дополнительное представление, то реализация должна определять int16_t
.
Типы atomic_
для <stdatomic.h>
также перечислены в N1548] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf#page = 297 ) (воспроизведено ниже), но это не требует соответствующего требования, что если в реализации есть int16_t
то есть atomic_int16_t
--- это суть моего вопроса.
7.17.6 Atomi c целочисленные и адресные типы
1 Для каждой строки в следующей таблице имя типа atomi c объявлено как соответствующий прямой тип.
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.
3 Тип atomic_bool
предоставляет логическое значение atomi c.
4 Тип atomic_address
обеспечивает операции atomi c void *. Единицей сложения / вычитания должен быть один байт.
5 ПРИМЕЧАНИЕ. Представление целочисленных и адресных типов atomi c не обязательно должно иметь тот же размер, что и их соответствующие обычные типы. По возможности они должны иметь одинаковый размер, так как это облегчает перенос существующего кода.