我看到 glibc 参考和 C90 修正案 1 的一个矛盾。
glibc reference 中的引用说 wchar_t 可能会提升为 wint_t:
如果 wchar_t 定义为 char 类型 wint_t 必须定义为 int 由于参数提升
但是 AMD1 是这样说的:
目前,现有实现可能将 wchar_t 设置为 int 并将 wint_t 设置为 long,并且默认促销不会将 int 更改为 long。基本上,这是由于 wchar_t 和 wint_t 是 typedef。因此,我们现在不会将 wchar_t 提升为 wint_t。
有人知道哪一个是正确的吗?
标准是否说在以下两个程序中强制转换为 unsigned int 和 int 是正确的?(我只是替换wint_t
了wchar_t
它们在 glibc 中的实际含义)(我只是替换wint_t
了wchar_t
它们在 glibc 中的实际含义)
#include <locale.h>
#include <wchar.h>
int main(void)
{
setlocale(LC_CTYPE, "en_US.UTF-8");
unsigned int wc;
wc = getwchar();
putwchar((int) wc);
}
--
#include <locale.h>
#include <wchar.h>
#include <wctype.h>
int main(void)
{
setlocale(LC_CTYPE, "en_US.UTF-8");
int wc;
wc = L'ÿ';
if (iswlower((unsigned int) wc)) return 0;
return 1;
}