gpt4 book ai didi

c - 如何转换为 `wint_t` 和 `wchar_t` ?

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:58 26 4
gpt4 key购买 nike

标准是否保证在以下两个程序中转换为 wint_twchar_t 是正确的?

#include <locale.h>
#include <wchar.h>
int main(void)
{
setlocale(LC_CTYPE, "");
wint_t wc;
wc = getwchar();
putwchar((wchar_t) wc);
}

--

#include <locale.h>
#include <wchar.h>
#include <wctype.h>
int main(void)
{
setlocale(LC_CTYPE, "");
wchar_t wc;
wc = L'ÿ';
if (iswlower((wint_t) wc)) return 0;
return 1;
}

考虑 wchar_tsigned short 的情况(这假设的实现仅限于 BMP),wint_tsigned int,并且 WEOF == ((wint_t)-1)。然后 (wint_t)U+FFFF 是与 WEOF 没有区别。是的,U+FFFF 是一个保留代码点,但是碰撞还是不对的。

如果没有,我不想发誓这在现实生活中永远不会发生对现有实现的详尽审计。

另见 May wchar_t be promoted to wint_t?

最佳答案

在你描述的环境中,wchar_t无法准确描述BMP:L'\uFEFF' exceeds the range of wchar_t as its type是 unsigned 等同于 wchar_t。 (C11 6.4.4.4 字符常量 p9)。将其存储到定义为 signed shortwchar_t,假设 16 位 short,更改其值。

另一方面,如果用于源代码的字符集是 Unicode,并且编译器已正确配置以正确解析其编码,则 L'ÿ' 的值为 255 具有无符号类型,因此第二个示例中的代码定义完美且明确。

如果 int 是 32 位宽而 short 是 16 位宽,那么将 wchar_t 定义为 似乎更加一致>intunsigned shortWEOF 然后可以定义为 (-1),一个不同于 wchar_t 的所有值或至少代表 Unicode 代码点的所有值的值.

关于c - 如何转换为 `wint_t` 和 `wchar_t` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40759266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com