Всегда ли wint_t, по крайней мере, такой же большой, как wchar_t? а как unsigned short может удовлетворить требования wint_t? - PullRequest
1 голос
/ 31 марта 2020

Кажется, все предполагают, что 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 байта в некоторых реализациях.

...