Cubbi 已经回答了这个问题。这里有一些额外的信息,因为标准的定义,并不是真正的自我解释。
wctype_t 表示特定于语言环境的字符分类。所以它不是关于字符,而是关于它们的分类(又名。旧的 isalpha()、isalnum()、..)。函数 iswctype() 使用 wctype_t 值来测试宽字符。示例(C11,第 7.30.2.2.1 节):
iswctype(wc, wctype("alnum")) // iswalnum(wc)
iswctype(wc, wctype("alpha")) // iswalpha(wc)
iswctype(wc, wctype("blank")) // iswblank(wc)
iswctype(wc, wctype("lower")) // iswlower(wc)
...
类似地,一个 wctrans_t 表示表示特定于语言环境的字符映射。所以它不是关于字符代码集,而是从一种类型的宽字符到相关音调的映射(例如,像旧的 toupper(),到 lower(),...)。映射在 C11 标准的第 7.30.3 节中描述),这里有一些示例:
towctrans(wc, wctrans("tolower")) // towlower(wc)
towctrans(wc, wctrans("toupper")) // towupper(wc)
您提到的 wchar_t 定义对我来说似乎具有误导性,尽管 wchar_t 也是一个整数。
这里是它在 MSVC13 中定义的方式:
typedef unsigned short wint_t;
typedef unsigned short wctype_t;
typedef wchar_t wctrans_t; // yes, here too !