Кажется, все предполагают, что wint_t
по крайней мере равен wchar_t
. однако стандарт c позволяет диапазону wchar_t
иметь значение, которое напрямую не соответствует ни одному символу в расширенном наборе символов:
Значения WCHAR_MIN и WCHAR_MAX не обязательно соответствуют членам расширенного символа set.
и:
wchar_t
, который является целочисленным типом, диапазон значений которого может представлять различные коды для всех членов наибольшего расширенного набора символов, указанного среди поддерживаемые локали; нулевой символ должен иметь нулевое значение кода.
и wint_t
требуется, чтобы иметь возможность хранить только значения для членов расширенного набора символов и хотя бы одно дополнительное значение для WEOF
:
wint_t
, который является целочисленным типом, неизменным по умолчанию для продвижения аргументов, который может содержать любое значение, соответствующее членам расширенного набора символов, а также по крайней мере одно значение, которое не соответствует ни одному члену расширенного набора символов (см. WEOF
ниже);
требование, чтобы wint_t
не изменялось по умолчанию для продвижения аргументов, также не означает, что wint_t
больше wchar_t
, так как wchar_t
также может быть достаточно большим, чтобы его нельзя было изменить продвижения аргументов по умолчанию.
, поэтому в некоторых мнимых реализациях wchar_t
может быть определено достаточно большим, чтобы содержать много ненужных значений, которые не входят в расширенный набор символов, а также для обхода продвижения аргументов по умолчанию. тогда эта реализация может решить не включать эти значения в wint_t
. это позволяет wchar_t
быть больше wint_t
.
в соответствии со стандартным размером wchar_t
должно быть не менее 1 байта и wint_t
не менее 2 байтов. (при условии 8-битных байтов)
также в Microsoft Visual Studio wint_t
имеет значение typedef
ed до unsigned short
. насколько это удовлетворяет требованию быть неизменным при продвижении аргументов по умолчанию? я думал, c позволяет 2 байта wint_t
, потому что int
может быть 2 байта в некоторых реализациях.